omid.sandi
2 سال پیش توسط omid.sandi مطرح شد
4 پاسخ

خطای abstract methods در laravel socilite

سلام به همگی
من میخوام از 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 ولی هیچکدوم تاثیری نداشت
ممنون میشم راهنمایی کنید


ثبت پرسش جدید
مهدی مشایخی
تخصص : برنامه نویس پایتون - ماشین لرن...
@MahdiMashayekhi 2 سال پیش مطرح شد
0

سلام
به خاطر لاراول نسخه ۸ هست
و باید فیچر 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' => '',
        ]);
    }
}

omid.sandi
تخصص : برنامه نویس و طراح سایت
@omid.sandi79 2 سال پیش مطرح شد
0

@MahdiMashayekhi
از لاراول نسخه 10 استفاده میکنم


مهدی مشایخی
تخصص : برنامه نویس پایتون - ماشین لرن...
@MahdiMashayekhi 2 سال پیش مطرح شد
0

امتحان کردید؟
@omid.sandi79


omid.sandi
تخصص : برنامه نویس و طراح سایت
@omid.sandi79 2 سال پیش مطرح شد
0

@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;
    }
}

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام