Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 登录后的Laravel重定向_Php_Laravel_Authentication_Laravel 5.3 - Fatal编程技术网

Php 登录后的Laravel重定向

Php 登录后的Laravel重定向,php,laravel,authentication,laravel-5.3,Php,Laravel,Authentication,Laravel 5.3,这是文件 当用户成功通过身份验证时,他们将被重定向到 /homeURI。您可以自定义身份验证后重定向 通过在登录控制器上定义重定向到属性来定位, 注册表控制器和重置密码控制器: protected$redirectTo='/' 如果重定向路径需要自定义 生成逻辑您可以定义重定向到方法,而不是 重定向到属性: 受保护的函数重定向到(){ // } 所以我定义了它 protected function redirectTo() { if (\Auth::user()->isAdmin(

这是文件

当用户成功通过身份验证时,他们将被重定向到
/home
URI。您可以自定义身份验证后重定向 通过在
登录控制器
上定义
重定向到
属性来定位,
注册表控制器
重置密码控制器

protected$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()的实现

我找不到它在哪里检查
重定向到
方法

顺便说一句,我使用的是Laravel 5.3.28

有什么建议吗

编辑


这是固定在5.3.29,而我是在5.3.29。尽管如此,我还是忍不住认为文档有问题,或者这个
laravel
helper是他们为创建laravel项目而创建的。我确实使用它来生成项目,但它获取的不是最新版本。

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

return redirect('/');

替换为重写
authenticated()
函数:

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

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

redirectTo功能按预期工作,但已在5.3.29版中引入

也许这会有帮助

    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') }}">


这一点很明显。我的意思是为什么文档提到了一些无法实现的东西?Laravel新版本的文档通常只是从旧版本复制粘贴而来,但框架本身一直在变化<代码>重定向到
属性从5.2开始对我不起作用。真遗憾。你不能依赖官方文件!没有什么是完美的。Laravel文档仍然很棒。关于覆盖
sendLoginResponse
,我认为这不是一个好主意。因为它也做了一些其他的事情,我不得不重复它们。覆盖
authenticated
似乎是一个更好的主意。@vfsoraki它是
AuthenticateUsers
trait,在这里
return$this->authenticated($request,$this->guard()->user())?:redirect()->designed($this->redirectPath())<form class="form-horizontal" role="form" method="POST" action="{{ url(config('locales.locale_prefix'), 'login') }}">