2017-02-04 101 views
0

我已经使用Hash :: check()次数来更新密码功能。它工作正常。但是在这里它总是返回错误。我不明白为什么它返回假。这是为我工作的代码。Hash :: check()在Laravel中返回false

$pass_data = array(
      'current_pass' => $post['old_pass'], 
      'new_pass' => $post['new_pass'], 
      ); 
$pass_data['new_pass'] = bcrypt($pass_data['new_pass']); 

    if (\Hash::check($pass_data['current_pass'],\Auth::user()->password)) 
      { 

      $user = new User(); 
      if($user->where('id',\Auth::user()->id)->update(['password'=>$pass_data['new_pass']])){ 
        return response()->json(['msg'=>'Password Changed']); 
       } 
      } 

      else{ 
       return response()->json(['msg'=>'Wrong Password']); 
      } 

这里是一个正在返回假的代码,这里$ mem_id不是认证用户(因为改变非认证用户的通行证?是的话)。

$mem_id = $request['mem_id']; 
    $old_pass = $request['mem_old_pass']; 
    $mem_pass = User::where('id',$mem_id)->pluck('password'); 


    if (\Hash::check($old_pass,$mem_pass)) { 

     $new_pass = bcrypt($request['mem_new_pass']); 

     $update = User::where('id',$mem_id)->update(['name'=>$request['mem_name'],'email'=>$request['mem_email'],'password'=>$new_pass]); 


     if ($update) { 

      $updated_user = User::where('id',$mem_id)->get(); 
      return response()->json(['msg'=>'updated','user'=>$updated_user]); 
     } 
     else{ 

      return response()->json(['msg'=>'update_failed']); 
     } 
    } 

    else{ 
     return response()->json(['msg'=>'pass_fail']); 
    } 

我收到响应'pass_fail'

回答

0

Usage.

if (Hash::check('plain-text', $hashedPassword)) { 
    // The passwords match... 
} 

要传递到Hash::check没有明文密码但bcrypt($old_pass);结果。您应该传递纯文本,而不是加密的。

+0

是的,他确实是在向右转。我正在谈论关于检查的第二部分代码。 –

+0

对不起我的错误,你的回答是正确的 –

+0

编辑了这个问题,那是一个错误,我只是通过纯文本。仍然我得到错误 –

0

问题在于pluck()。当我用这个代码,它可以正常使用

$member = User::find($mem_id); 
$mem_pass = $member->password; 

现在我通过$ mem_pass哈希::检查,它的工作完美

1

因为摘去方法不返回指定列的值。