繁体   English   中英

Laravel 的 Auth::attempt() 返回 true 但 Auth::check() 返回 false

[英]Laravel's Auth::attempt() returns true but Auth::check() returns false

正如标题所说,Laravel 的函数Auth::attempt()在以下代码部分返回true (删除了不重要的部分):

public function doLogin()
{
    $validator = [..]

    if ($validator->fails()) {
        [..]
    } else {
        $userdata = array(
            'username'  => Input::get('username'),
            'password'  => Input::get('password')
        );

        if (Auth::attempt($userdata, true)) {
            return Redirect::to('/');
        } else {        
            return Redirect::to('login');
        }
    }
}

但是当我们被重定向时,我们尝试检查用户是否真的使用Auth::check()登录,并且它以某种方式返回false

我们在 Google 上尝试了所有可能的解决方案,但没有成功。 例如,我们添加了一个remember_token但它没有改变任何东西,尽管它证明了Auth::attempt()做了一些事情,因为remember_token是在数据库中设置的。

作为最后的手段,我们甚至试图在 ./vendor/laravel/framework/src/Illuminate/Auth/Guard.php 中的./vendor/laravel/framework/src/Illuminate/Auth/Guard.phpAuth::attempt()方法中打印一些东西,但我们没有看到任何东西,没有即使使用print_r 我们试图在完整的代码库中找到其他尝试功能,但没有找到。

可能是因为将User更改为它的翻译形式使其损坏,但随后函数Auth::attempt()也可能会损坏。

似乎发生了一些真正神奇的事情,但我们不知道发生了什么或如何发生。 其他人有什么想法吗?

默认情况下,Laravel 假设每个表都有一个名为 id 的主键。

可能的解决方案是在您的模型中执行此操作:

protected $primaryKey = 'id'; //Or what ever id name do you have.

如果您尝试使用带有自定义增量和唯一生成的 id 而不是来自 MongoDB 的默认 _id 的 laravel-mongodb,则可能会发生此错误。 在这种情况下的解决方案不是将您的自定义 id 命名为“id”,因为它会使 Laravel 感到困惑。 但是,将其命名为其他任何名称。

对于那些仍然有这个问题的人,如果您的主键不遵循 autoIncrement,您应该将以下代码添加到您的用户模型中:

public $incrementing=false;

如果您更改了主列名称,请添加以下内容:

protected $primaryKey = 'vid'; //changed to vid

暂无
暂无

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

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