fix. line cancel redirect

This commit is contained in:
ukyo 2025-02-06 15:32:09 +08:00
parent c880210f61
commit ffede88eec

View File

@ -42,71 +42,90 @@ public function redirectToProvider(Request $request)
*/ */
public function handleProviderCallback(Request $request) public function handleProviderCallback(Request $request)
{ {
// 如果用户取消了授权
if ($request->has('error') && $request->get('error') === 'access_denied') {
$redirectTo = session('redirect_to', 'member');
// 从 Session 获取 $redirectTo if ($redirectTo === 'admin') {
$redirectTo = session('redirect_to', 'member'); return redirect()->route('admin.login')->with('error', '您已取消 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]);
if ($redirectTo == 'admin') {
// Admin 登录逻辑
$existingUser = $user = User::where('line_id', $lineId)
->orWhere('email', $email)
->first();
if ($existingUser) {
Auth::guard('web')->login($existingUser);
} else { } else {
$newUser = User::create([ return redirect()->route('login')->with('error', '您已取消 LINE 授权');
'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(); try {
return $user->email // 获取 LINE 用户信息
? redirect()->route('admin.index') $user = Socialite::driver('line')->user();
: redirect()->route('admin.profile'); Log::info('line', ['user' => $user]);
} else {
// Member 登录逻辑 $lineId = $user->getId();
$existingUser = Member::where('line_id', $lineId) $name = $user->getName();
->orWhere('email', $email) $avatar = $user->getAvatar() ?? '';
->first(); $email = $user->getEmail() ?? '';
if ($existingUser) {
Auth::guard('member')->login($existingUser); 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 { } else {
$newUser = Member::create([ // Member 登录逻辑
'name' => $name, $existingUser = Member::where('line_id', $lineId)
'line_id' => $lineId, ->orWhere('email', $email)
'password' => bcrypt(env('DEFAULT_PASSWORD')), ->first();
'source' => 'cafeg', if ($existingUser) {
'avatar' => $avatar, 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, $user = Auth::guard('member')->user();
]); return $user->email
Auth::guard('member')->login($newUser); ? redirect()->route('member.index')
: redirect()->route('member.profile');
} }
} catch (\Exception $e) {
Log::error('LINE 登录失败: ' . $e->getMessage());
$user = Auth::guard('member')->user(); // 发生异常时,返回登录页面并提示错误
return $user->email return redirect()->route('login')->with('error', 'LINE 登录失败,请稍后再试');
? redirect()->route('member.index')
: redirect()->route('member.profile');
} }
} }
public function adminLogout() public function adminLogout()
{ {
Auth::guard('web')->logout(); Auth::guard('web')->logout();