正如标题所说,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()
也应该被破坏。
似乎发生了一些神奇的事情,但我们不知道是什么或如何发生的。还有谁有主意吗
3条答案
按热度按时间7y4bm7vi1#
默认情况下,Laravel假设每个表都有一个名为id的主键。
可能的解决方案是在你的模型中这样做:
如果您尝试使用自定义增量和唯一生成的id而不是MongoDB中的default _id,则可能会发生此错误。这种情况下的解决方案是不要像这样命名你的自定义id 'id',因为这会让Laravel感到困惑。但是,叫它别的什么都行。
kadbb4592#
对于那些仍然有这个问题的人,如果你的主键不遵循autoIncrement,你应该添加下面的代码到你的User模型中:
如果你已经改变了你的主列名,添加这个:
polkgigr3#
我遇到了一个类似的错误,在登录然后redirest,
Auth::user() returned null
。我发现罪魁祸首是
created_at, updated_at which is string
的数据类型。解决方案是将string
数据类型转换为mongoDB date
在其他情况下我建议检查您的用户表,可能有一个错误的地方