سلام به همگی
من میخوام از 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;
}
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟