Как реализовать вход с помощью google в laravel

В наше время пользователи меньше взаимодействуют с веб-сайтом. Вы хотите зарегистрировать пользователей на своей платформе. Вы должны упростить процесс регистрации и входа для вашего приложения. Laravel предоставляет пакет socialite для упрощения этого процесса, т.е. за минимальное количество шагов пользователи могут подключиться к вашему приложению. В этой статье мы реализуем вход с помощью google в приложении laravel.

Пошаговое руководство по входу в систему google в приложении laravel

  1. Установите пакетУстановите пакет Socialite на приложение laravel. Выполните следующую команду.
composer require laravel/socialite
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  1. Настройте учетные данныеСмотрите скриншот для получения учетных данных google. Нажмите здесь, чтобы создать учетные данные на платформе google.

Вы можете добавить учетные данные в файл env и добавить переменную окружения в файл config/services.php напротив переменной google, как показано ниже:

GOOGLE_AUTH_CLIENT_ID=XXXXXXXXXXXXXXXX
GOOGLE_AUTH_CLIENT_SECRET=XXXXXXXXXXXXX
GOOGLE_AUTH_URL=http://127.0.0.1:8000/auth/google
Вход в полноэкранный режим Выйти из полноэкранного режима

Файл services.php выглядит так, как показано ниже:

'google'=>[
    'client_id' => env('GOOGLE_AUTH_CLIENT_ID'),
    'client_secret' => env('GOOGLE_AUTH_CLIENT_SECRET'),
    'redirect'=> env('GOOGLE_AUTH_URL')
]
Вход в полноэкранный режим Выйти из полноэкранного режима
  1. Создайте столбец миграции в таблице пользователяСделайте файл миграции, который создаст столбец в таблице пользователя. Запустите команду migration в вашем приложении.
<?php

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class AddGoogleIdColumn extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function ($table) {

            $table->string('google_id')->nullable();

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropColumns('google_id');
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Добавьте поле google_id в свойство fillable в файле User.php.

protected $fillable = [
    'name',
    'email',
    'password',
    'google_id'
];
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  1. Создание контроллера для социального входаВы можете создать контроллер для социального входа и загрузить драйверы для социального входа. Я собираюсь загрузить драйвер google.
<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use LaravelSocialiteFacadesSocialite;
use Exception;
use InertiaInertia;
use IlluminateSupportFacadesRoute;
use AppModelsUser;
use IlluminateSupportFacadesAuth;

class SocialController extends Controller
{
    public function redirectToGoogle()
    {
        return Socialite::driver('google')->redirect();
    }
    public function handleGoogleCallback()
    {
        try {
            $user = Socialite::driver('google')->user();
            $finduser = User::where('google_id', $user->id)->first();
            if($finduser){
                Auth::login($finduser);
                return redirect('/');
            }else{
                $checkUser = User::where('email', $user->email)->first();
                if($checkUser) {
                    $checkUser->google_id = $user->id;
                    $checkUser->save();
                    Auth::login($checkUser);
                } else {
                    $newUser = User::create([
                        'name' => $user->name,
                        'email' => $user->email,
                        'google_id'=> $user->id,
                        'password' => encrypt('123456dummy')
                    ]);
                    Auth::login($newUser);
                }
                return redirect('/');
            }
        } catch (Exception $e) {
            return Inertia::render('Auth/Login', [
                'canResetPassword' => Route::has('password.request'),
                'status' => 'Something Went wrong!! Try later',
            ]);
        }
    }
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Нажмите здесь

Оцените статью
Procodings.ru
Добавить комментарий