我正在laravel 5.2应用程序中处理路由。
预期行为是:
- 未注册的用户尝试访问受保护的页面
- 已重定向至"登录"
- 已重定向(成功时)到预定页面
当然,如果没有预定页面(当用户实际登录时),则应将用户重定向到他的"仪表板"
示例:
/* Create a Payment | Only for registered Users (client) */
Route::post('payment', 'PaymentController@create')->middleware('client');
用户将被重定向到登录页面,但是,登录后,他将被重定向至我在authcontroller中定义为$redirectTo 的页面
protected $redirectTo = '/backoffice';
有没有一种方法可以将重定向设置为类似(inteded或默认值)
我发现AuthenticatesUsers.php
中定义的AuthenticatesUsers Trait
具有函数handleUserWasAuthenticated
,它检查Laravel默认身份验证AuthController.php
是否定义了方法authenticated
。如果未定义此方法,则用户始终重定向到您在$redirectTo
属性中定义的任何内容。它不会将用户重定向到预期的URL。但是,在AuthController.php
中,如果您定义方法如下:
protected function authenticated (Request $request, $user){
//add ur custom actions after the user is authenticated
}
redirect()->intended()
将完全按照您的预期工作,并且在用户经过身份验证后,他将被重定向到预期的URL。
此解决方案将与Laravel 5和6完美配合,我目前正在开发Laravel 6.0。*
只需将此函数添加到app''Http''Controllers''Auth''lognController.php:
public function redirectTo()
{
$finalRedirectionTo = 'Session::get('url.intended', $this->redirectTo);
return $finalRedirectionTo;
}
就这样!由于de RedirectUsers Laravel trait是由AuthenticatesUsers trait实现的,您的LoginController也应该"使用"该trait,因此会检查函数redirectTo()是否存在,并调用它以返回重定向的url。
它与社会和本地账户合作
我希望它能有所帮助!David Lyons
如果您希望未登录的用户重定向到登录页面,并在成功登录后返回到预期的url或变量中设置的默认url。
protected $redirectTo = '/backoffice';
那么你可能会用这样的东西。
return redirect()->guest('login');
Laravel将为您保留会话中的"intended.url",并在成功登录后将用户重定向回后台。
以下是关于各种Laravel版本的另一个答案
我正在使用Laravel 5.4
登录控制器:
public function __construct()
{
session(['url.intended' => url()->previous()]);
$this->redirectTo = session()->get('url.intended');
$this->middleware('guest')->except('logout');
}
在5.2中仅更改"app/Http/Controllers/Auth/AuthController.php"31号线附近protected$redirectTo='/Your_View_page';