2016-11-12 129 views
2

我正在構建Laravel 5.3應用程序並使用laravel的basic authartisan make:auth)。現在,「忘記密碼」功能可以正常工作,所以如果用戶由於不知道密碼而無法登錄,他可以通過郵件重置密碼。但現在我希望登錄的用戶也可以更改他們的密碼。我發現that,但這並不能真正幫助我。我也知道有ResetsPasswords的特質,但我該如何使用它?那麼我是否也有一個觀點可以使用?Laravel 5.3更改密碼

有人可以幫我嗎?

回答

3

你實際上並不需要使用默認密碼控制器來實現這一點,你可以編寫自己的函數來得到相同的結果,例如:

public function postUpdatePassword() { 

     $user = Auth::user(); 

     $password = $this->request->only([ 
      'current_password', 'new_password', 'new_password_confirmation' 
     ]); 

     $validator = Validator::make($password, [ 
      'current_password' => 'required|current_password_match', 
      'new_password'  => 'required|min:6|confirmed', 
     ]); 

     if ($validator->fails()) 
      return back() 
       ->withErrors($validator) 
       ->withInput(); 


     $updated = $user->update([ 'password' => bcrypt($password['new_password']) ]); 

     if($updated) 
      return back()->with('success', 1); 

     return back()->with('success', 0); 
    } 

正如你可以看到我註冊了一個新的自定義的驗證規則,以檢查是否新passowrd匹配的舊人,註冊規則剛剛進入「應用程序/供應商/ AppServiceProvider.php」,並添加到啓動功能的下一行:

Validator::extend('current_password_match', function($attribute, $value, $parameters, $validator) { 
      return Hash::check($value, Auth::user()->password); 
     }); 

現在驗證規則有效,但您不會收到錯誤消息,以添加錯誤消息你剛剛創建的新規則,你將不得不修改「資源/郎/ EN/validation.php」這些行:

'custom' => [ 
     'current_password' => [ 
      'current_password_match' => 'Current password is incorrect.', 
     ], 
    ], 

就是這樣,現在你可以使用這個功能更改當前用戶的密碼:)

+0

看起來很好,所以現在我只需要一個視圖與領域的形式current_passoword,new_password和new_password_confirm,並將其提交給該函數,是嗎? – nameless

+0

這就是你現在唯一需要做的事情.. –

+0

讓它工作,非常感謝你:) – nameless

0

如果你想保持你的AppServiceProvider.php文件清理關閉(無論什麼原因;我個人喜歡這些小文件整潔),你可以添加執行以下兩件事情:

1)增加以下到AppServiceProvider.php的引導()方法

Validator::extend('current_password_match', 'App\Validators\[email protected]'); 

2)添加一個新的文件'app/Validators/PasswordMatch.php'與上面提到的關閉一致。

<?php 

namespace App\Validators; 
use Hash; 
use Auth; 

class PasswordMatch 
{ 
    public function check($attribute, $value, $parameters, $validator){ 

     return Hash::check($value, Auth::user()->password); 

    } 

} 

然後,您可以也驗證規則的郵件添加到您的擴展FormRequest類消息()方法,如:

'current_password_match' => 'Current password is incorrect',