🔥جمعه سیاه در راکت با (( ۷۰ درصد )) تخفیف! این فرصت دیگه تکرار نمیشه
مشاهده دورههاسلام به همگی
من میخوام از ouath لینکدین استفاده کنم.
پکیج socialite رو نصب کردم ، روت هارو تعریف کردم طبق زیر:
routes/web.php
Route::get('/auth/linkedin', [\App\Http\Controllers\Auth\LoginController::class, 'linkedinRedirect'])
->name('linkedin_login');
Route::get('/auth/linkedin/callback', [\App\Http\Controllers\Auth\LoginController::class, 'linkedinCallback'])
->name('linkedin_callback');
app/http/controller/auth/loginController:
public function linkedinRedirect()
{
return Socialite::driver('linkedin')->stateless()->redirect();
}
public function linkedinCallback()
{
try {
$linkedinUser = Socialite::driver('linkedin')->stateless()->user();
}
catch (\Exception $e) {
dd($e);
}
}
config/services.php:
'linkedin' => [
'client_id' => env('LINKEDIN_CLIENT_ID'),
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
'redirect' => env('LINKEDIN_REDIRECT_URI'),
],
.env :
LINKEDIN_CLIENT_ID=*******
LINKEDIN_CLIENT_SECRET=*********
LINKEDIN_REDIRECT_URI=http://localhost:8000/auth/linkedin/callback
url کال بک رو در پنل لینکدین هم تعریف کردم
وقتی روی گزینه رود با لینکدین کلیک میکنم منتقل میشم به صفحه انتخاب اکانت
و وقتی allow رو میزنم که از اطلاعات اکانت استفاده کنه به متد کال بک بر میگرده ولی ارور زیر رو میده بهم :
Class Laravel\Socialite\Two\User contains 6 abstract methods and must therefore be declared abstract or implement the remaining methods (Illuminate\Contracts\Auth\Authenticatable::getAuthIdentifierName, Illuminate\Contracts\Auth\Authenticatable::getAuthIdentifier, Illuminate\Contracts\Auth\Authenticatable::getAuthPassword, ...)
خیلی کار هارو امتحان کردم
از تعریف متد هایی که توی ارور گفته داخل مدل یوزر تا تعریف نام دامنه در فایل config/session.php ولی هیچکدوم تاثیری نداشت
ممنون میشم راهنمایی کنید
سلام
به خاطر لاراول نسخه ۸ هست
و باید فیچر Laravel\Socialite\Two\User رو اضافه کنید
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Socialite\Two\User as SocialiteUser;
class User extends Model implements Authenticatable
{
use HasFactory;
// other methods and properties
public function getAuthIdentifierName()
{
return 'id';
}
public function getAuthIdentifier()
{
return $this->getKey();
}
public function getAuthPassword()
{
return $this->password;
}
public function getRememberToken()
{
return null;
}
public function setRememberToken($value)
{
// do nothing
}
public function getRememberTokenName()
{
return null;
}
public function setPasswordAttribute($password)
{
$this->attributes['password'] = bcrypt($password);
}
public static function fromSocialite(SocialiteUser $user)
{
$registeredUser = static::where('email', $user->getEmail())
->first();
if ($registeredUser) {
return $registeredUser;
}
return static::create([
'name' => $user->getName(),
'email' => $user->getEmail(),
'password' => '',
]);
}
}
@MahdiMashayekhi
بله مدل یوزر من طبق زیره الان:
<?php
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Laravel\Socialite\Two\User as SocialiteUser;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'username',
'fname',
'lname',
'phone',
'locale',
'theme',
'address',
'avatar',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function setLocaleAttribute($value)
{
$this->attributes['locale'] = $value;
app()->setLocale($value);
}
public function user_info()
{
return $this->hasOne(UserInfo::class);
}
public function getAuthIdentifierName()
{
return 'id';
}
public function getAuthIdentifier()
{
return $this->id;
}
public function getAuthPassword()
{
return null;
}
public function getRememberToken()
{
return null;
}
public function setRememberToken($value)
{
// do nothing
}
public function getRememberTokenName()
{
return null;
}
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟