laravel 5.2在登录后重定向到预期的url


laravel 5.2 redirect to intended url after login

我正在laravel 5.2应用程序中处理路由。

预期行为是:

  1. 未注册的用户尝试访问受保护的页面
  2. 已重定向至"登录"
  3. 已重定向(成功时)到预定页面

当然,如果没有预定页面(当用户实际登录时),则应将用户重定向到他的"仪表板"

示例:

/* 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';