2017-03-04 142 views
0

我已添加代碼以在我的webapp中更改密碼。但Hash::check()不起作用。總是返回錯誤。另外Hash::Make()每次都返回不同的字符串。我試過bcrypt(),但它也不起作用。請幫幫我。這是我的代碼。在Laravel中更改密碼5.4

public function changePassword(Request $request) 
{ 
    $user = Auth::user(); 

    $curPassword = $request->input['curPassword']; 
    $newPassword = $request->input['newPassword']; 

    if (Hash::check($curPassword, $user->password)) { 
     $user_id = $user->id; 
     $obj_user = User::find($user_id)->first(); 
     $obj_user->password = Hash::make($newPassword); 
     $obj_user->save(); 

     return response()->json(["result"=>true]); 
    } 
    else 
    { 
     return response()->json(["result"=>false]); 
    } 
} 

謝謝。

+0

它應該是'$請求 - >輸入('curPassword ');'不'$ request-> input ['curPassword'];' –

回答

1

我認爲你的$ curPassword變量是空的,這就是爲什麼它總是返回false。試試這種方式

$curPassword = $request->curPassword; 
$newPassword = $request->newPassword; 

除非您發送數據在input陣列。但有些人,Hash::check()失敗,這意味着沒有匹配。

至於相同的字符串,是的,Hash::make()總是返回一個不同的字符串。我想出於安全目的。

+0

謝謝你的回覆。我按照你的說法嘗試過。但它也不起作用。 –

+0

最後,我修好了。這是我的錯誤。 –

1

應該

$curPassword =$request->input('curPassword'); 
$newPassword = $request->input('newPassword'); 

$curPassword = $request->input['curPassword']; 
$newPassword = $request->input['newPassword']; 

在Laravel Documentation他們說,如果你想更改密碼的檢查後,你可以做的是

$request->user()->fill([ 
      'password' => Hash::make($request->newPassword) 
     ])->save(); 
+0

謝謝你的回覆。我按照你的說法嘗試過。但它也不起作用。 –

+0

嘗試'dd($ request)'你的數據,看看你會得到什麼。 –

+0

感謝您的努力。這是我的錯誤。發送請求時,我發送錯誤的值。 –

3

下面我是怎麼做到的:

在我的控制,我用下面的方法:

public function changePassword() 
{ 
    $this->validate(request(), [ 
     'current_password' => 'required|current_password', 
     'new_password' => 'required|string|min:6|confirmed', 
    ]); 

    request()->user()->fill([ 
     'password' => Hash::make(request()->input('new_password')) 
    ])->save(); 
    request()->session()->flash('success', 'Password changed!'); 

    return redirect()->route('password.change'); 
} 

這將驗證輸入,然後正確保存新的密碼爲當前用戶。它也會閃爍一條消息,然後將它們返回到密碼更改表單。你可以刪除那部分,並在那裏做你自己的事情。

這使用我創建的自定義驗證規則,稱爲current_password。你必須像這樣添加到您的AppServiceProvider::boot()方法:

public function boot() 
{ 
    // current password validation rule 
    Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) { 
     return Hash::check($value, Auth::user()->password); 
    }); 
} 

只要確保你正在使用AuthHash,並且Validator外牆在AppServiceProvider

最後,我們只需要在我們的lang/en/validation.php文件來聲明錯誤消息:

'current_password' => "The :attribute is invalid.", 

希望這有助於。

0

還有一個錯誤在這行

$obj_user = User::find($user_id)->first(); 

應該

$obj_user = User::find($user_id); 

作爲官方文件說

// Retrieve a model by its primary key... 
$flight = App\Flight::find(1); 

// Retrieve the first model matching the query constraints... 
$flight = App\Flight::where('active', 1)->first();