2016-03-09 47 views
1

我有通過從我的視圖發送到控制器的發佈請求傳遞的用戶名和密碼。負責處理帖子請求的控制器:無法驗證Laravel中的用戶:'無效的用戶名或密碼'

public function postLogin(Request $request) { 
     $this->validate($request, [ 
      'username' => 'required', 
      'password' => 'required' 
     ]); 

     if (!Auth::attempt([ 
      'username' => $request['username'],      
      'password' => $request['password'] ])) { 
      return redirect()->back()->with(['fail' => 'invalid username or password']);  
     } 

     return redirect()->route('auth.dashboard');        
    } 

問題是我總是收到'失敗'消息:'無效的用戶名或密碼'。

我看着phpmyadmin裏面的表,用戶名和密碼非常簡單(用戶名:Admin &密碼:12345)。

這是管理員表的數據庫:

class CreateAdminsTable extends Migration 
{ 

    public function up() 
    { 
     Schema::create('admins', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->timestamps(); 
      $table->string('username')->unique(); 
      $table->string('password'); 
      $table->rememberToken(); 
     }); 
    } 

    public function down() 
    { 
     Schema::drop('admins'); 
    } 
} 

作爲參考,我使用Laravel 5.2

更新1:在使用者經由註冊控制器,其存儲的用戶名中創建和密碼在數據庫中。這裏是控制器:

public function postRegister(Request $request) { 

     $admin = new Admin(); 

     $this->validate($request, [ 
      'username' => 'required|unique:admins|max:30|min:3', 
      'password' => 'required|min:5', 
      'password_confirm' => 'required'   
     ]); 

     $password = $request['password']; 
     $passwordConfirm = $request['password_confirm']; 

     if ($password !== $passwordConfirm) { 
      return redirect()->back()->with(['fail' => 'password fields do not match!']); 
     }  
     $hashedPassword = password_hash($password, PASSWORD_BCRYPT); 

     $admin->username = $request['username']; 
     $admin->password = $hashedPassword; 
     $admin->save(); 

     return redirect()->route('index')->with(['success' => 'Successfully created account!']);  

    } 
+0

我更喜歡使用Hash :: make而不是password_hash。因爲在傳遞給password_hash的Hash :: make中有一個額外的選項。這就是爲什麼哈希沒有匹配 – cresjie

+0

修復它!請輸入這個答案,以便我可以upvote並勾選它。 – Frosty619

回答

1

我更喜歡使用Hash :: make而不是password_hash。因爲在傳遞給password_hash的Hash :: make中有一個額外的選項。這就是爲什麼哈希沒有匹配

+0

乾杯!這解決了它。 – Frosty619

0

請更改以下代碼的登錄功能。

public function postLogin(Request $request) { 
     $this->validate($request, [ 
      'username' => 'required', 
      'password' => 'required' 
     ]); 

     if (Auth::attempt([ 
      'username' => $request['username'],      
      'password' => $request['password'] ],$remember)) { 
      return redirect()->route('auth.dashboard');    
     } 
     return redirect()->back()->with(['fail' => 'invalid username or password']); 

    } 

注意:這裏$remember應該是1/0或TRUE/FALSE。

希望這會幫助你。

+0

我複製粘貼你的代碼,我得到了錯誤「未定義的變量記住」,然後我將它設置爲true,並將它傳遞給嘗試方法,並得到了和以前一樣的錯誤。 – Frosty619

+0

@ Frosty619請確保您的數據庫中的密碼是什麼,是指哪種格式? Laravel使用散列函數在數據庫中存儲密碼。而且你仍然會得到相同的錯誤,然後將散列值存儲在數據庫的密碼列中,然後重試。 –

1

您在Auth :: attempt中總是會出現錯誤,因爲數據庫中的密碼不是哈希值。首先將密碼存儲在數據庫中。你可以使用播種機爲了在種子數據庫

class UserSeeder extends Seeder 
{ 
    public function run() 
    { 
     //your admin model 
     Admin::create([ 
      'username' => 'admin', 
      'password' => Hash::make(123) 
     ]); 
    } 
} 

希望這會有所幫助。

+0

根據布魯斯的評論,我對密碼進行哈希處理。請參閱上面的更新! – Frosty619

+0

另外,我不想使用Seeder,因爲我希望能夠讓用戶註冊,但是,當我嘗試上面的代碼時,它運行良好。 – Frosty619

0

Laravel將會期待散列的密碼。 所以如果phpmyadmin中的密碼是可見的,它將無法在Laravel中驗證。我期望在phpmyadmin的密碼看起來像這樣$2y$13$Cn0gwiUfg2mq5Y3/V98aB.NZ4GJqjbwhvKlsSAOYkVNHKlWRmwZ1W

+0

根據您的評論,我在我的註冊控制器中添加了password_hash方法。我創建了一個新的管理員,其密碼存儲爲phpmyadmin中的散列字符串,但我仍然收到相同的錯誤。請參閱更新以獲取更多信息。謝謝! – Frosty619

+0

試試這個答案http://stackoverflow.com/a/35884495/21460因爲我只有laravel的表面知識 –

+0

不用擔心,謝謝你的幫忙!我不想使用Seeder,因爲我希望用戶能夠註冊。 – Frosty619

相關問題