[英]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.