正如标题所说,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
。
作为最后的手段,我们甚至试图在Auth::attempt()
的Laravel ./vendor/laravel/framework/src/Illuminate/Auth/Guard.php
方法中打印一些内容,但我们没有看到任何内容,甚至没有print_r
。我们试图在完整的代码库中找到其他尝试函数,但没有找到。
关于将User
更改为翻译后的形式可能会导致其中断,但是函数Auth::attempt()
也可能会被破坏。
看起来真的很神奇,但我们不知道是什么或如何。还有其他人有想法吗?
答案 0 :(得分:5)
默认情况下,Laravel假定每个表都有一个名为id的主键。
可能的解决方案是在您的模型中执行此操作:
protected $primaryKey = 'id'; //Or what ever id name do you have.
如果您尝试将laravel-mongodb与自定义增量和唯一生成的id一起使用而不是MongoDB的默认_id,则可能会发生此错误。在这种情况下,解决方案不是将您的自定义ID命名为“id' id'因为这会让Laravel感到困惑。但是,请将其他名称命名。
答案 1 :(得分:0)
对于仍然存在此问题的用户,如果您的主键不遵循autoIncrement,则应将以下代码添加到您的用户模型中:
public $incrementing=false;
,如果您更改了主列名称,请添加以下内容:
protected $primaryKey = 'vid'; //changed to vid