- Mensajes: 46
- Gracias recibidas: 1
Laravel - Inicio de sesión Google - Usando Laravel Socialite
- luispindola
- Autor del tema
- Fuera de línea
- Administrador
Menos
Más
2 años 10 meses antes - 2 años 9 meses antes #29
por luispindola
Laravel - Inicio de sesión Google - Usando Laravel Socialite Publicado 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:
Y en el archivo .env:
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:
Definir las rutas a los metodos de su controlador:
Agregar usuario (en caso de que no exista) y logearlo:
Modificamos la migración de la tabla user agregando los campos de google:Modificar el modelo User: para agregar los campos:
Para que las tablas se actualicen (eliminando todo su contenido) debemos ejecutar el comando de Artisan migrate:refresh
Y Editamos el LoginController :
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();
});
}
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 ('/');
}
}
}
Última Edición: 2 años 9 meses antes por luispindola.
Por favor, Identificarse o Crear cuenta para unirse a la conversación.
Tiempo de carga de la página: 0.085 segundos