[英]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.php
的Auth::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.