Laravel登录后保存用户页面

8 浏览
0 Comments

Laravel登录后保存用户页面

我有一个问题。当访客在页面上,并且想要登录时,Laravel在登录后重定向到主页面。我该如何做到,在访客登录后保存他所在的页面,并重定向到那个页面上?

中间件auth:

check()) {
        return redirect()->guest('/login');
    }
    return $next($request);
}
}

我使用默认的Laravel身份验证。但是登录后返回到之前的页面不起作用。

0
0 Comments

问题的出现原因:在Laravel中,Socialite和默认的身份验证(auth)的重定向机制不同,导致用户登录后无法正确跳转到想要的页面。

解决方法1(针对Laravel Socialite):

redirectToProvider方法中添加以下代码:

if(!session()->has('url.intended')) {
    session()->put('url.intended', url()->previous());
}

handleProviderCallback方法中添加以下代码:

if(session()->has('url.intended')) {
    $redirectUrl = session('url.intended');
} else {
    $redirectUrl = 'your fallback url here';
}
session()->forget('url.intended');
return redirect($redirectUrl);

解决方法2(针对有独立登录页面的默认身份验证):

if (Auth::attempt(['email' => $email, 'password' => $password])) {
    // Authentication passed...
    return redirect()->intended('dashboard');
}

解决方法3(针对没有独立登录页面的默认身份验证):

$redirectUrl = session('url.intended', url()->previous());
session()->forget('url.intended');
return redirect($redirectUrl);

如果有独立的登录页面,可以在登录页面的后台控制器中添加protected function authenticated(Request $request, $user)方法,并将方法2中的代码添加进去。

如果没有独立的登录页面,可以在LoginController中添加protected function authenticated(Request $request, $user)方法,并将方法2中的代码添加进去。

如果登录后需要跳转到不同的页面,可以根据需要修改return redirect()->intended('dashboard');中的页面路径。

0