Laravel - Inicio de sesión Google - Usando Laravel Socialite

Más
2 años 1 mes antes - 2 años 1 mes antes #29 por luispindola
Instalación de Laravel Socialite:
laravel.com/docs/9.x/socialite

> composer require laravel/socialite



Configuración:

En el archivo app/config/services:
    //Socialite
    'google' => [
        'client_id'     => env('GOOGLE_CLIENT_ID'),
        'client_secret' => env('GOOGLE_CLIENT_SECRET'),
        'redirect'      => env('GOOGLE_REDIRECT_URL'),
    ],

Y en el archivo .env:
GOOGLE_CLIENT_ID=YOUR_CLIENT_ID
GOOGLE_CLIENT_SECRET=YOUR_CLIENT_SECRET
GOOGLE_REDIRECT_URL=http://localhost:8000/google/callback

Ingresar a: console.cloud.google.com para tramitar el cliente id y el secreto.

Enrutamiento:

Creamos el controllador: LoginController con dos funciones una para redirigir al usuario al proveedor OAuth y otra para recibir la devolución de llamada del proveedor después de la autenticación:
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;

class LoginController extends Controller
{
    public function redirectToProvider()
    {
        return Socialite::driver('google')->redirect();
    }

    public function handleProviderCallback()
    {
        $user=Socialite::driver('google')->user();

        dd($user->token);
    }
}

Definir las rutas a los metodos de su controlador:
use App\Http\Controllers\Auth\LoginController;

Route::get('login/google', [LoginController::class, 'redirectToProvider']);
Route::get('login/google/callback', [LoginController::class, 'handleProviderCallback']);

Agregar usuario (en caso de que no exista) y logearlo:

Modificamos la migración de la tabla user agregando los campos de google:
class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->string('google_id',250)->nullable();
            $table->string('google_picture',250)->nullable();
            $table->rememberToken();
            $table->timestamps();
        });
    }
Modificar el modelo User: para agregar los campos:
    protected $fillable = [
        'name',
        'email',
        'password',
        'google_id',
        'google_picture',
    ];


Para que las tablas se actualicen (eliminando todo su contenido) debemos ejecutar el comando de Artisan migrate:refresh

Y Editamos el LoginController :
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Auth;

class LoginController extends Controller
{
    public function redirectToProvider()
    {
        return Socialite::driver('google')->redirect();
    }

    public function handleProviderCallback()
    {
        $user_google=Socialite::driver('google')->user();

        $find_user = User::where('email',$user_google->email)->first();

        //dd($user_google);

        if($find_user)
        {
            $find_user->update([                
                'google_id'         =>  $user_google->id,
                'google_picture'    =>  $user_google->avatar,
                'email_verified_at' =>  date("Y-m-d H:i:s"),
            ]);

            Auth::login($find_user);

            return redirect ('/');
        }
        else
        {
            $new_user = User::create([
                'name'              =>  $user_google->name,
                'email'             =>  $user_google->email,
                'email_verified_at' =>  date("Y-m-d H:i:s"),
                'password'          =>  Hash::make('**************'),
                'google_id'         =>  $user_google->id,
                'google_picture'    =>  $user_google->avatar,
            ]);

            Auth::login($new_user);

            return redirect ('/');
        }
    }
}
Adjuntos:
Última Edición: 2 años 1 mes antes por luispindola.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Tiempo de carga de la página: 0.087 segundos