簡體   English   中英

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

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM