2017-02-23 114 views
1

我有一些關於認證嘗試失敗的帖子,但我的情況似乎有所不同。仍處於開發階段,所以我的密碼是純文本。我嘗試登錄,但我一直收到錯誤,因此重定向回登錄頁面。認證嘗試失敗Laravel 5.4

錯誤消息說用戶名/密碼不匹配,但dd顯示電子郵件和密碼都是正確的。

什麼可能是造成這種故障的原因? PS:這是我第一次用laravel

web.php

Route::post('/login', '[email protected]'); 
Route::get('/', '[email protected]'); 

AuthController

public function auth() 
{ 
    //dd($request); 

    // attempt to login the user 
    if (! auth()->attempt(request(['email', 'password']))) { 

     return back()->withErrors([ 
      'message' => 'Username/Password does not macth' 
     ]); 
    } 

    return redirect('/'); 
} 

PostController中

public function index() 
{ 
    $posts = Post::latest()->limit(3)->get(); 

    return view('post.index', compact('posts')); 
} 
+0

是您的密碼保存在數據庫中的哈希或可見? – dparoli

+0

密碼不被散列。這是純文本 – Mena

回答

4

在您的用戶模型中使用此代碼,並且只有在需要時纔會自動對密碼進行散列處理:

public function setPasswordAttribute($value) 
{ 
    if(\Hash::needsRehash($value)) { 
     $value = \Hash::make($value); 
    } 
    $this->attributes['password'] = $value; 
} 

後更改密碼,所以你必須在數據庫中的哈希密碼

+0

非常感謝......那段代碼起到了魔力。我將學習如何在另一個測試項目中使用make:auth進行身份驗證。 – Mena

+0

Im使用替代模型到用戶模型,其中一個引用了預先存在的表格,並且在默認用戶部分的config/auth.php中定義了模型和替代表格。我如何利用這個新模型的指定方法,因爲我的密碼還沒有被散列? – blamb

+0

如果您發佈了一個新問題,請參考這個問題,評論不適合檢查您的案例。 – dparoli

0

不知道我理解的工作......但如果你是使用Laravel身份驗證(php artisan make:auth),您將不會以純文本格式存儲密碼...所以我如果你直接在你的數據庫中設置密碼,它將無法工作,因爲它會檢查數據庫中的密碼字段,並假定它是用一個dbcrypt散列存儲的...

因此,如果您使用的是默認身份驗證隨着laravel,使用註冊表格創建您的用戶帳戶

由於這是您第一次使用laravel我建議看看https://laracasts.com/series/laravel-from-scratch-2017/episodes/17,因爲它涵蓋了auth概念,併爲您提供了設置用戶的快速演練auth

+0

謝謝。我認爲問題是密碼字段,目前是純文本。順便說一下,我沒有使用make:auth,因爲我遵循laracast教程。如果我能找到它,我會再看看它。下次我將使用make:auth – Mena