2016-07-25 117 views
0

我为我的应用程序创建了用户配置文件。在这个用户配置文件中,用户可以像电子邮件地址,密码,位置,公司名称等更新他们的信息。如果用户想要更改他们的一个信息,用户需要提供当前密码。我将验证用户提供的当前密码是否正确。错误是我无法验证用户提供的当前密码。以下是我的用户控制器代码的一部分。检索存储在db中的密码

if($request['current_pwd']) 
     { 
      if($request['new_pwd']) 
      { 
       if($user->password == bcrypt($request['current_pwd'])) 
       { 
        $user->password = bcrypt($request['new_pwd']); 
       }else{ 
        return redirect()->back()->with(['message' => 'Wrong current password !']); 
       } 
      }elseif($user->password == bcrypt($request['current_pwd'])) 
      { 
       $user->save(); 
      }else{ 
       return redirect()->back()->with(['message' => 'Wrong Current Password ! Check Again!']); 
      } 
     }else{ 
      return redirect()->back()->with(['message' => 'Please enter your current password !']); 
     } 

如果用户想要更改当前密码,用户必须输入当前密码,新密码,。如果当前密码与存储在db中的密码相同,则新密码将被更新。如果不是,则返回消息。

回答

3

试试这个 首先包括哈希南Symbol在你的控制器,

use Illuminate\Support\Facades\Hash; 

,并使用以下条件,以确保当前密码输入有效

if($request->has('current_password')){ 
     $current_password = $request->input('current_password'); 
     if(!Hash::check($current_password,Auth::user()->password)){ 
      return redirect()->back()->withInput()->withErrors([ 
       'current_password' => 'You current password doesnot match with the logined user\'s !' 
      ]); 
     } 
    } 
+0

哇,这是工作 –

1

您应该将加密的“当前密码”条目与用户已有的密码相匹配。您可以通过使用该功能得到用户的密码Auth::user()

所以,你的情况应该是:

if(bcrypt($request['current_pwd']) == Auth::user()) { 
    // Do password change 
} else { 
    // Invalid password error 
} 

还有另外一个功能:getAuthPassword()您可以通过指定用户ID,像这样使用:

$user = User::find('1'); 
$user->getAuthPassword(); 

这将让用户ID密码1

+0

它没有工作!我用getAuthPassword()。 –

+0

使用'getAuthPassword()'将需要您将其与用户标识一起使用。你尝试过'Auth :: user()'吗? – AliIshaq

+0

是的,ofcoz,这里是我的代码的一部分,'{$ user = User :: where('id',$ id)}'然后$ user-> getAuthPassword()。但它不好 –

0

由于盐析!这种$user->password == bcrypt($request['current_pwd']检查不起作用!

试着做相同密码的散列,你会得到不同的散列!

所以请像这样laravel 5.2

$crypt = new Hashing\BcryptHasher(); 
$match = $crypt->check($user->password, $request['current_pwd']);