繁体   English   中英

登录后,Laravel重定向

[英]Laravel redirect after login

这是文档

用户成功通过身份验证后,将重定向到/home URI。 您可以通过在LoginControllerRegisterControllerResetPasswordController上定义redirectTo属性来自定义验证后重定向位置:

protected $redirectTo = '/';

如果重定向路径需要自定义生成逻辑,则可以定义redirectTo方法而不是redirectTo属性:

protected function redirectTo() { // }

所以我定义了它

protected function redirectTo()
{
    if (\Auth::user()->isAdmin()) {
        return '/dashboard';
    } else {
        return '/home';
    }
}

但正如你可能猜到的那样,它不起作用。 它总是重定向到/home

通过消息来源,我发现了这一点

namespace Illuminate\Foundation\Auth;

trait AuthenticatesUsers
{
    ...

    /**
     * Send the response after the user was authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    protected function sendLoginResponse(Request $request)
    {
        $request->session()->regenerate();

        $this->clearLoginAttempts($request);

        return $this->authenticated($request, $this->guard()->user())
                ?: redirect()->intended($this->redirectPath());
    }
    ...
}

这是$this->redirectPath()

namespace Illuminate\Foundation\Auth;

trait RedirectsUsers
{
    /**
     * Get the post register / login redirect path.
     *
     * @return string
     */
    public function redirectPath()
    {
        return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
    }
}

我找不到它检查redirectTo方法的位置。

我正在使用Laravel 5.3.28,BTW。

有什么建议?

编辑

这是在5.3.29中确定的,而我在5.3.29。 我仍然无法帮助它,但认为文档有问题,或者他们为创建Laravel项目而创建的这个laravel助手。 我确实用它来生成项目,并没有获取最新版本。

改为覆盖authenticated()函数:

   protected function authenticated($request,$user)
    {
        if(\Auth::user()->isAdmin()){
            return redirect()->intended('dashboard'); 
        }

        return redirect()->intended('/home');   
    }

在5.3中,您可以在LoginController覆盖sendLoginResponse() ,以便在登录后将用户重定向到自定义页面:

return redirect('/');

redirectTo函数按预期工作,但在5.3.29版本中引入

https://github.com/laravel/framework/blob/5.3/CHANGELOG-5.3.md

也许这会有所帮助

    protected $redirectTo = '/account';

    protected function redirectTo()
    {
        if ( ! empty(config('locales.locale_prefix'))) {

            return $this->redirectTo = config('locales.locale_prefix') .'/account';
        }

       return $this->redirectTo;
    }

并且还在形式上改变行动

<form class="form-horizontal" role="form" method="POST" action="{{ url(config('locales.locale_prefix'), 'login') }}">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM