带身份验证(Google,Facebook)的Laravel Passport(API)

问题描述 投票:0回答:1
<?php namespace App\Http\Controllers\API; use App\Http\Controllers\Controller; use App\Models\User; use Exception; use Illuminate\Http\JsonResponse; use Laravel\Socialite\Facades\Socialite; use Carbon\Carbon; use Illuminate\Support\Str; use Illuminate\Support\Facades\Log; class GoogleAuthController extends Controller { public function redirectToGoogle(): JsonResponse { try { $url = Socialite::driver('google') ->stateless() ->with([ 'prompt' => 'select_account', 'access_type' => 'offline', 'response_type' => 'code', 'scope' => 'openid profile email' ]) ->redirect() ->getTargetUrl(); return response()->json([ 'status' => 'success', 'redirect_url' => $url ]); } catch (Exception $e) { Log::error('Lỗi Google Redirect: ' . $e->getMessage()); return response()->json([ 'status' => 'error', 'message' => 'Lỗi kết nối Google: ' . $e->getMessage() ], 500); } } public function handleGoogleCallback(): JsonResponse { try { $googleUser = Socialite::driver('google') ->stateless() ->user(); // Ghi log để debug Log::info('Thông tin user Google:', [ 'id' => $googleUser->id, 'email' => $googleUser->email ]); $user = User::updateOrCreate( ['email' => $googleUser->email], [ 'name' => $googleUser->name, 'google_id' => $googleUser->id, 'email_verified_at' => now(), 'password' => bcrypt(Str::random(16)) ] ); // Tạo token với Passport $expiresAt = now()->addHour(); $tokenResult = $user->createToken('Google-Auth', [], $expiresAt); $token = $tokenResult->token; $token->expires_at = $expiresAt; $token->save(); return response()->json([ 'status' => 'success', 'message' => 'Đăng nhập Google thành công', 'data' => [ 'user' => $user->only(['id', 'name', 'email']), 'access_token' => $tokenResult->accessToken, 'refresh_token' => $token->id, 'token_type' => 'Bearer', 'expires_at' => Carbon::parse($token->expires_at) ->timezone('Asia/Ho_Chi_Minh') ->format('Y-m-d H:i:s') ] ]); } catch (Exception $e) { Log::error('Lỗi Google Callback: ' . $e->getMessage()); return response()->json([ 'status' => 'error', 'message' => 'Lỗi xử lý đăng nhập Google: ' . $e->getMessage() ], 500); } } }

laravel laravel-passport laravel-socialite
1个回答
0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.