2016-02-17 195 views
1

我使用的身份验证:Laravel 5.2更改用户密码功能

https://laravel.com/docs/5.2/authentication#included-routing

我要实现认证用户一个“更改密码”功能,并且我有两个选择:

  1. 我可以使用附带的'/密码/重置'路线,不是最优的,但可以。但它只在用户未登录时才起作用。我是否也可以使其通过身份验证用户的工作?

  2. 我可以在视图中创建一个'输入新密码'的表格,并在UsersController中创建一个updatePassword方法。但是我需要检查提交的密码是否不是空的,这意味着用户想要改变它,然后应用验证规则,然后加密并更新它。这是做正确的方式吗?任何例子将不胜感激。

回答

1

我觉得#2是要走的路,它只是用户设置表单中的另一个字段。在我的应用程序它看起来像这样:

$user->update($request->except('password')); 
if($request->get('password') != ""){ 
    $user->password = Hash::make($request->get('password')); 
} 
$user->save(); 

我做了一个特殊的检查,以确保我不更新空白字段的密码。添加验证口味。

+1

是的,我正在为这个选择做准备。谢谢。 –

0

您可以在模型组属性像

public function setPasswordAttribute($value) 
    { 
    $this->attributes['password'] = bcrypt($value); 
} 

在编辑方法:

if (empty($request->password)) { 
     $data = $request->except('password'); 
    } else { 
     $data = $request->all(); 
    } 

    $user = $this->userRepository->update($data, $id); 
1

我已经在我的用户文件中实现修改密码,如下

public function postReset(Request $request) 
    { 
      $this->validate($request, [ 
        'password' => 'required|confirmed','email' => 'required|email', 

      ]); 
      $user = User::findOrFail($id); 
      $input = $request->input(); 
      //Change Password if password value is set 
      if ($input['password'] != "") { 
       //dd(bcrypt($input['password'])); 
       $input['password'] = bcrypt($input['password']); 
      } 
      $user->fill($input)->save(); 
    }