2016-07-25 105 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']);