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

Ren*_*eee 4 php authentication laravel

正如标题所说,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');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我们被重定向时,我们会尝试检查用户是否确实已登录Auth::check(),并false以某种方式返回.

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

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

可能是某些关于改变User它的翻译形式的东西使它破坏了,但是那个功能Auth::attempt()也应该被打破.

看起来真的很神奇,但我们不知道是什么或如何.有没有其他人有想法?

abd*_*oud 6

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

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

protected $primaryKey = 'id'; //Or what ever id name do you have.
Run Code Online (Sandbox Code Playgroud)

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