我有一个页面上有一些内容和评论部分.注释只能由登录的用户保留,因此我已将登录表单添加到页面以供用户登录(仅在他们尚未登录时显示).
我遇到的问题是,当用户登录时,他们会被重定向回主页,而不是他们之前所在的页面.
我还没有从开箱即用的设置中更改登录方法.
任何人都可以建议一种简单的方法来设置重定向网址.我的想法是能够在表单中设置它会很好.
Dig*_*uin 43
laravel 5.3的解决方案:
在loginController中,将showLoginForm()函数覆盖为以下函数:
public function showLoginForm()
{
if(!session()->has('url.intended'))
{
session(['url.intended' => url()->previous()]);
}
return view('auth.login');
}
Run Code Online (Sandbox Code Playgroud)
它将设置"url.intended"会话变量,即laravel用于在登录后使用前一个URL查找要重定向的页面的变量.
它还检查是否已设置变量,以避免在用户提交带有错误的表单时使用登录URL设置变量.
小智 22
对于Laravel 5.5,以下代码只是通过更新LoginController.php为我工作
public function showLoginForm()
{
session(['link' => url()->previous()]);
return view('auth.login');
}
protected function authenticated(Request $request, $user)
{
return redirect(session('link'));
}
Run Code Online (Sandbox Code Playgroud)
bnq*_*oan 14
请redirect()->intended()在Laravel 5.1中使用
您还可以在此处查看更多相关信息:http://laravel.com/docs/5.1/authentication
Mah*_*mid 14
对于Laravel 5.3
在App/Http/Controllers/Auth/LoginController
这个__construct()函数中添加这一行
$this->redirectTo = url()->previous();
Run Code Online (Sandbox Code Playgroud)
所以完整的代码将是
public function __construct()
{
$this->redirectTo = url()->previous();
$this->middleware('guest', ['except' => 'logout']);
}
Run Code Online (Sandbox Code Playgroud)
它对我来说就像一个魅力我正在使用laravel 5.3.30
如果您想始终重定向到/home除带注释的页面之外的页面,那么您应该覆盖redirectToLoginController 中的方法:
public function redirectTo()
{
return session('url.intended') ?? $this->redirectTo;
}
Run Code Online (Sandbox Code Playgroud)
在您想要保留在网站上的所有页面上,您应该在会话中存储一个请求的 url:
public function show(Category $category, Project $project){
// ...
session()->flash('url.intended' , '/' . request()->path());
}
Run Code Online (Sandbox Code Playgroud)
对于Laravel 5.4,以下代码只是通过更新LoginController.php为我工作
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\URL;
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
Session::put('backUrl', URL::previous());
}
public function redirectTo()
{
return Session::get('backUrl') ? Session::get('backUrl') : $this->redirectTo;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
Laravel 5.6,当用户输入错误的凭据时,登录页面将重新加载并进行会话(['link'=> url()-> previous()]); 将在链接变量中使用登录URL。因此,如果登录成功,用户将再次重定向到登录页面,或者重定向到/ home。因此,请避免使用以下代码为我服务!之后,无论用户输入错误的凭据多少时间,他都会在登录后重定向到登录页面之前的确切位置。
在LoginController中更新或覆盖公共函数showLoginForm()。
public function showLoginForm()
{
if (session('link')) {
$myPath = session('link');
$loginPath = url('/login');
$previous = url()->previous();
if ($previous = $loginPath) {
session(['link' => $myPath]);
}
else{
session(['link' => $previous]);
}
}
else{
session(['link' => url()->previous()]);
}
return view('auth.login');
}
Run Code Online (Sandbox Code Playgroud)
另外,在LoginController中验证或更新受保护的功能(请求$ request,$ user)。
protected function authenticated(Request $request, $user)
{
return redirect(session('link'));
}
Run Code Online (Sandbox Code Playgroud)
小智 5
使用当前页面 url 作为查询字符串重定向到登录:
<a href="{{ url('login?redirect_to=' . urlencode(request()->url())) }}">login</a>
Run Code Online (Sandbox Code Playgroud)
在您的 LoginController 检查是否存在并将查询字符串保存在会话中,然后在登录后重定向到 url
public function __construct() {
parent::__construct();
if ( \request()->get( 'redirect_to' ) ) {
session()->put( 'redirect.url', \request()->get( 'redirect_to' ) );
}
$this->middleware( 'guest' )->except( 'logout' );
}
protected function authenticated(Request $request, $user) {
if(session()->has('redirect.url') {
return redirect( session()->get( 'redirect.url' ) );
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36508 次 |
| 最近记录: |