2016-11-12 138 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',