From 913113b60bbad6b74bde0f36b980b204d2befd43 Mon Sep 17 00:00:00 2001 From: cgonzalesmo Date: Wed, 17 Aug 2022 19:18:05 -0500 Subject: [PATCH] AuthGoogle - Add LoginController --- app/Http/Controllers/Api/LoginController.php | 82 ++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 app/Http/Controllers/Api/LoginController.php diff --git a/app/Http/Controllers/Api/LoginController.php b/app/Http/Controllers/Api/LoginController.php new file mode 100644 index 0000000..556d107 --- /dev/null +++ b/app/Http/Controllers/Api/LoginController.php @@ -0,0 +1,82 @@ +validateProvider($provider); + if (!is_null ($validated)) { + return $validated; + } + return Socialite::driver($provider)->stateless()->redirect(); + //return Socialite::driver($provider)->redirect(); + } + + //$out = new \Symfony\Component\Console\Output\ConsoleOutput(); + //$out->writeln("Hello from Terminal"); + //error_log('Some message here.'); + + + public function handleProviderCallback($provider){ + + $validated = $this->validateProvider($provider); + if (!is_null($validated)) {return $validated;} + + try { + $userProvider = Socialite::driver($provider) ->stateless()->user(); + error_log(json_encode($userProvider->user)); + } + catch (ClientException $exception) { + return response()->json(['error' => 'Credenciales de google invalidas.'],422); + } + + + + $userCreated = User::firstOrCreate( + [ + 'email' => $userProvider->email + ], + [ + //'email_verified_at' => now(), + 'name' => $userProvider->user['given_name'], + 'lastname' => $userProvider->user['family_name'], + 'status' => true + ] + ); + + $userCreated->providers()->updateOrCreate( + [ + 'provider' => $provider, + 'id_provider' => $userProvider->getId() + ], + [ + 'avatar' => $userProvider->getAvatar() + ] + ); + + $token = $userCreated->createToken('token-auth_token')->plainTextToken; + return response()->json([ + "message" => "Usuario logueado", + "user" => $userCreated, + "access_token" => $token + ]); + + } + + + protected function validateProvider($provider){ + //En caso se quiera iniciar sesion con facebook o github + //if (!in_array($provider, ['facebook', 'github', 'google'])){ + //por el momento solo con google + if (!in_array($provider, ['google'])){ + return response()->json(['error' => 'Por favor usar google para loguearse'], 422); + } + } +}