افزودن لاگین با جیمیل (گوگل) در لاراول

در این پست بهتون میگم چطور از پکیج Socialite استفاده کنین و به وبسایتتون لاگین با جیمیل یا… رو اضافه کنین. برای شروع نیازه که ما پکیج Socialite رو بوسیله composer نصب کنیم. راهنمای خود لاراول رو اینجا ببینین:  Laravel Socialite

نصب Socialite 

composer require laravel/socialite


کانفیک لاراول

سرویسی که میخواین (گوگل، فیسبوک، لینکداین و…) رو به config/service.php اضافه کنین.

'google' => [
    'client_id'     => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect'      => env('GOOGLE_REDIRECT')
],

بعد اینکه پکیج جدید رو نصب کردیم سرویس پرووایدر اون رو هم به config/app.php اضافه میکنیم

/*
* Package Service Providers...
*/
Laravel\Socialite\SocialiteServiceProvider::class,

سرویس پرووایدر جایی برای راه انداری برنامه ها و پکیج هاست، خط بالا به لاراول Socialite رو برای استفاده میشناسونه.

همیشه پای یک alias هم در میونه! برای دسترسی راحتتر آلیاس اون رو هم نصب میکنیم.

'aliases' => [
    // ...
    'Socialite' => Laravel\Socialite\Facades\Socialite::class,
]

تا اینجا شما میبایست ساختار اهراز هویت رو داشته باشید و در این آموزش تصور میکنیم این مرحله رو قبلا انجام دادین.

پروژه خودتون رو در گوگل https://console.developers.google.com/projectcreate درست کنین و بعد هم یک اعتبار نامه در اینجا https://console.developers.google.com/apis/credentials درست کنین.

OAuth clinet id google console
OAuth client ID > Consent > Web application

اطلاعاتی که گرفتین رو در .env فایل خودتون وارد کنین:

GOOGLE_CLIENT_ID=000000000000-XXXXXXXXXXX.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=XXXXXXXXXXXXX
GOOGLE_REDIRECT=http://localhost:8000/callback

قراردادن آدرس برگشتی

در اینجا باید آدرس کالبک رو وارد کنین.

بعد وارد کردن این آدرس ها وارد وب روت خود بشین و روت های مخصوص ریدارکت به گوگل و بازگشت اون رو ایجاد کنین.

Route::get('/redirect', 'Auth\LoginController@redirectToProvider');
Route::get('/callback', 'Auth\LoginController@handleProviderCallback');

در خط اول رواتی (یا روتی) رو تعریف میکنیم که کاربر رو به گوگل میفرسته و خط دوم برگشت از گوگل با دریافت اطلاعات کاربر هست. حالا در LoginController.php متد هایی که تو روات تعریف کردیم رو وارد میکنیم. متد زیر مارو به گوگل ریدایرکت میکنه برای گرفتن اطلاعات کاربر.

/**
  * Redirect the user to the Google authentication page.
  *
  * @return \Illuminate\Http\Response
  */
public function redirectToProvider()
{
    return Socialite::driver('google')->redirect();
}

و متد بعدی دریافت اطلاعات کاربر از گوگل هست (برگشت از گوگل) که اگر ایمیل قبلا وجود داشته، ثبت نام انجام میشه و اگر وجود نداشته باشه ما اون کاربر رو ایجاد میکنیم و سپس لاگین انجام میشه:

    /**
     * Obtain the user information from Google.
     *
     * @return \Illuminate\Http\Response
     */
    public function handleProviderCallback()
    {
        try {
            $user = Socialite::driver('google')->user();
        } catch (\Exception $e) {
            return redirect('/login');
        }        // only allow people with @company.com to login
        if(explode("@", $user->email)[1] !== 'company.com'){
            return redirect()->to('/');
        }        // check if they're an existing user
        $existingUser = User::where('email', $user->email)->first();        if($existingUser){
            // log them in
            auth()->login($existingUser, true);
        } else {
            // create a new user
            $newUser                  = new User;
            $newUser->name            = $user->name;
            $newUser->email           = $user->email;
            $newUser->google_id       = $user->id;
            $newUser->avatar          = $user->avatar;
            $newUser->avatar_original = $user->avatar_original;
            $newUser->save();            auth()->login($newUser, true);
        }
        return redirect()->to('/home');
    }

 

خب تا اینجای کار شما همه کارو انجام دادین فقط بعد اینکه پکیجی رو نصب کردین حتما دامپ کنین:

php artisan clear-compiled
composer dump-autoload
php artisan optimize

اگر خواستین از آدرس های مختلفی برای کالبک استفاده کنین دستور زیر کمکتون میکنه

public function socialLogin($loginFrom){
  return Socialite::driver('google') >redirectUrl('http://your-domain.com?data=123')->redirect();
}

 

منابع:

Add Login with Google to your Laravel app
Laravel 5.5 socialite integration shows error formatRedirectUrl() must be of the type array, null given
Dynamic callback url laravel socialite

یک دیدگاه در “افزودن لاگین با جیمیل (گوگل) در لاراول”

  1. سلام
    همه مطالبی که گفتین رو اجرا کردم ولی بعد از ریدارکت از گوگل، $user رو null بر می گرداند , ضمنا پورت ۸۰۰۰ که روی لوکال اجرا نمیشه اینو بایستی چیکار کرد.
    ممنون.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

9 − 5 =