From ffede88eecd28bb8c9ee887110b72673e9239aac Mon Sep 17 00:00:00 2001 From: ukyo Date: Thu, 6 Feb 2025 15:32:09 +0800 Subject: [PATCH] fix. line cancel redirect --- app/Http/Controllers/LoginController.php | 127 +++++++++++++---------- 1 file changed, 73 insertions(+), 54 deletions(-) diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php index 42072cd..30d4aee 100644 --- a/app/Http/Controllers/LoginController.php +++ b/app/Http/Controllers/LoginController.php @@ -42,71 +42,90 @@ public function redirectToProvider(Request $request) */ public function handleProviderCallback(Request $request) { + // 如果用户取消了授权 + if ($request->has('error') && $request->get('error') === 'access_denied') { + $redirectTo = session('redirect_to', 'member'); - // 从 Session 获取 $redirectTo - $redirectTo = session('redirect_to', 'member'); - - $user = Socialite::driver('line')->user(); - Log::info('line', ['user' => $user]); - $lineId = $user->getId(); - $name = $user->getName(); - $avatar = $user->getAvatar() ?? ''; - $email = $user->getEmail() ?? ''; - - Log::info('email', [$email]); - - if ($redirectTo == 'admin') { - // Admin 登录逻辑 - $existingUser = $user = User::where('line_id', $lineId) - ->orWhere('email', $email) - ->first(); - - if ($existingUser) { - Auth::guard('web')->login($existingUser); + if ($redirectTo === 'admin') { + return redirect()->route('admin.login')->with('error', '您已取消 LINE 授权'); } else { - $newUser = User::create([ - 'name' => $name, - 'line_id' => $lineId, - 'password' => bcrypt(env('DEFAULT_PASSWORD')), - 'avatar' => $avatar, - 'source' => 'cafeg', - 'email' => $email, - 'can_login' => 0, - ]); - Auth::guard('web')->login($newUser); + return redirect()->route('login')->with('error', '您已取消 LINE 授权'); } + } - $user = Auth::guard('web')->user(); - return $user->email - ? redirect()->route('admin.index') - : redirect()->route('admin.profile'); - } else { - // Member 登录逻辑 - $existingUser = Member::where('line_id', $lineId) - ->orWhere('email', $email) - ->first(); - if ($existingUser) { - Auth::guard('member')->login($existingUser); + try { + // 获取 LINE 用户信息 + $user = Socialite::driver('line')->user(); + Log::info('line', ['user' => $user]); + + $lineId = $user->getId(); + $name = $user->getName(); + $avatar = $user->getAvatar() ?? ''; + $email = $user->getEmail() ?? ''; + + Log::info('email', [$email]); + + // 从 Session 获取跳转路径 + $redirectTo = session('redirect_to', 'member'); + + if ($redirectTo === 'admin') { + // Admin 登录逻辑 + $existingUser = User::where('line_id', $lineId) + ->orWhere('email', $email) + ->first(); + + if ($existingUser) { + Auth::guard('web')->login($existingUser); + } else { + $newUser = User::create([ + 'name' => $name, + 'line_id' => $lineId, + 'password' => bcrypt(env('DEFAULT_PASSWORD')), + 'avatar' => $avatar, + 'source' => 'cafeg', + 'email' => $email, + 'can_login' => 0, + ]); + Auth::guard('web')->login($newUser); + } + + $user = Auth::guard('web')->user(); + return $user->email + ? redirect()->route('admin.index') + : redirect()->route('admin.profile'); } else { - $newUser = Member::create([ - 'name' => $name, - 'line_id' => $lineId, - 'password' => bcrypt(env('DEFAULT_PASSWORD')), - 'source' => 'cafeg', - 'avatar' => $avatar, + // Member 登录逻辑 + $existingUser = Member::where('line_id', $lineId) + ->orWhere('email', $email) + ->first(); + if ($existingUser) { + Auth::guard('member')->login($existingUser); + } else { + $newUser = Member::create([ + 'name' => $name, + 'line_id' => $lineId, + 'password' => bcrypt(env('DEFAULT_PASSWORD')), + 'source' => 'cafeg', + 'avatar' => $avatar, + 'email' => $email, + ]); + Auth::guard('member')->login($newUser); + } - 'email' => $email, - ]); - Auth::guard('member')->login($newUser); + $user = Auth::guard('member')->user(); + return $user->email + ? redirect()->route('member.index') + : redirect()->route('member.profile'); } + } catch (\Exception $e) { + Log::error('LINE 登录失败: ' . $e->getMessage()); - $user = Auth::guard('member')->user(); - return $user->email - ? redirect()->route('member.index') - : redirect()->route('member.profile'); + // 发生异常时,返回登录页面并提示错误 + return redirect()->route('login')->with('error', 'LINE 登录失败,请稍后再试'); } } + public function adminLogout() { Auth::guard('web')->logout();