Laravel 登录后重定向回原始目的地

222

这似乎是一个相当基础的流程,而且 Laravel 有许多好的解决方案来处理基本的事情,我觉得我可能遗漏了什么。

用户点击需要身份验证的链接。 Laravel 的 auth 过滤器启动并将用户路由到登录页面。 用户登录后,再次访问之前被“auth”过滤器拦截的原始页面。

有没有一种很好的方法可以知道他们最初想要进入哪个页面?由于 Laravel 拦截请求,我不知道它是否在某处记录以便用户登录后轻松路由。

如果没有,我很想听听你们中的一些人如何手动实现这一点。

26个回答

-1
       // Also place this code into base controller in contract function,            because ever controller extends base  controller
 if(Auth::id) {
  //here redirect your code or function
 }
if (Auth::guest()) {
       return Redirect::guest('login');
}

2
请在您的代码旁边提供一些评论,以提供一些上下文。谢谢。 - Suever

-1

你在你的routes.php中尝试过这个吗?

Route::group(['middleware' => ['web']], function () {
    //
    Route::get('/','HomeController@index');
});

-1

Laravel 5.2

如果您正在使用其他中间件,例如Admin中间件,您可以使用以下方法为url.intended设置会话:

基本上,我们需要手动设置\Session::put('url.intended', \URL::full());以进行重定向。

示例

  if (\Auth::guard($guard)->guest()) {
      if ($request->ajax() || $request->wantsJson()) {
         return response('Unauthorized.', 401);
      } else {
        \Session::put('url.intended', \URL::full());
        return redirect('login');
      }
  }

在登录尝试时

确保在登录尝试时使用return \Redirect::intended('default_path');


这就是 redirect()->guest('login') 的作用。 - Emile Bergeron

-1

我正在使用自定义登录控制器和中间件,用于Laravel 5.7的以下方法,但我希望它适用于任何版本的laravel 5

  • 中间件内部

    if (Auth::check()){
        return $next($request);
    }
    else{
      return redirect()->guest(route('login'));
    }
    
  • 控制器登录方法内部

    if (Auth::attempt(['email' => $email, 'password' => $password])) {
    return redirect()->intended('/default');
    }
    
  • 如果您需要将意图 URL 传递给客户端,可以尝试以下操作

       if (Auth::attempt(['username' => $request->username, 'password' => $request->password])) {
           $intended_url= redirect()->intended('/default')->getTargetUrl();
           $response = array(
          'status' => 'success',
          'redirectUrl' => $intended_url,
          'message' => '登录成功,您将被重定向到主页..', );
          return response()->json($response);
        } else {
            $response = array(
          'status' => 'failed',
          'message' => '用户名或密码不正确', );
         return response()->json($response);
        }
    

-1
首先,您应该知道如何将用户重定向到“登录”路径:
return redirect()->guest('/signin');

不要像这样:

return redirect()->intended('/signin');

-1

Laravel 5.3 这对我来说实际上只需要更新 LoginController.php 就可以了。

 use Illuminate\Support\Facades\Session;
 use Illuminate\Support\Facades\URL;


public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
    Session::set('backUrl', URL::previous());
}


public function redirectTo()
{
    return Session::get('backUrl') ? Session::get('backUrl') :   $this->redirectTo;
}

参考:https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接