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

yc0p9oo0  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(141)

正如标题所说,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中打印Laravel的Auth::attempt()方法中的一些东西,但我们没有看到任何东西,甚至没有使用print_r。我们试图在完整的代码库中找到其他的函数,但没有找到。
可能是因为将User转换为它的翻译形式使它被破坏了,但是函数Auth::attempt()也应该被破坏。
似乎发生了一些神奇的事情,但我们不知道是什么或如何发生的。还有谁有主意吗

7y4bm7vi

7y4bm7vi1#

默认情况下,Laravel假设每个表都有一个名为id的主键。
可能的解决方案是在你的模型中这样做:

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

如果您尝试使用自定义增量和唯一生成的id而不是MongoDB中的default _id,则可能会发生此错误。这种情况下的解决方案是不要像这样命名你的自定义id 'id',因为这会让Laravel感到困惑。但是,叫它别的什么都行。

kadbb459

kadbb4592#

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

public $incrementing=false;

如果你已经改变了你的主列名,添加这个:

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

polkgigr3#

我遇到了一个类似的错误,在登录然后redirest,Auth::user() returned null
我发现罪魁祸首是created_at, updated_at which is string的数据类型。解决方案是将string数据类型转换为mongoDB date
在其他情况下我建议检查您的用户表,可能有一个错误的地方

相关问题