2015-08-29 48 views
5

我正在嘗試爲我的登錄/授權用戶添加密碼更改功能。這是你的純OLE通用設立:在Laravel 5.1中驗證/授權當前密碼

Current Password 
New Password 
Confirm New Password 

很顯然,我可以只使用驗證的新密碼和確認密碼,但我怎麼授權的當前密碼提交針對自己的實際電流密碼?

在用戶模型password是一個隱藏的屬性,所以我不能只匹配他們。

我試圖通過Illiminate\AuthGuard看,但我沒有看到它在任何地方。也許我錯過了,或者我正在以這種錯誤的方式去做?

+0

讓我知道如果我的答案是你在找什麼。 – MaXi32

回答

10

這裏的萬一別人的答案是尋找:

$validator = $this->validator($request->all()); 

$validator->after(function($validator) use ($request) { 
    $check = auth()->validate([ 
     'email' => $this->user->email, 
     'password' => $request->current_password 
    ]); 

    if (!$check): 
     $validator->errors()->add('current_password', 
      'Your current password is incorrect, please try again.'); 
    endif; 
}); 

if ($validator->fails()): 
    return redirect('account/password') 
     ->withErrors($validator) 
     ->withInput(); 
endif; 

$this->user->password = bcrypt($request->password); 
$this->user->save(); 
+1

是否可以直接在請求中添加這些檢查? – naneri

1

獲取當前密碼並與新密碼進行比較。

//use Auth, Hash, Input; 

if (Hash::check(Input::get('new_password'), Auth::user()->password)) 
     echo "Matched"; 
else 
     echo "Not matched"; 

您是否使用內置認證包中的laravel?如果是,驗證已經完成。檢查app/Http/Controller/Auth/AuthController.php,你可以看到這個驗證功能。您可以添加更多,如果你想!:

protected function validator(array $data) 
{ 
    return Validator::make($data, [ 
     'first_name' => 'required|max:255', 
     'last_name' => 'required|max:255', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|confirmed|min:6', 
    ]); 
} 

如果上述驗證過程中發生任何錯誤,它會被髮送到$錯誤變量,其中刀片視圖可以抓住他們。所以,在你重置密碼圖(視圖/ auth /中reset.blade.php),你可以趕上驗證錯誤如下:

@if (count($errors) > 0) 
         <div class="alert alert-danger"> 
          <strong>Whoops!</strong> There were some problems with your input.<br><br> 
          <ul> 
           @foreach ($errors->all() as $error) 
            <li>{{ $error }}</li> 
           @endforeach 
          </ul> 
         </div> 
@endif 
+0

奇怪它沒有工作母雞我最初嘗試過。但是,可惜的是,這並沒有像我希望的那樣真正有所幫助,因爲我仍然需要編寫自定義驗證器來進行比較。很難相信這已經不是驗證者的一部分。 –

+0

嗨,我已經更新了我的答案。您是否使用認證軟件包中構建的laravel?如果是的話,你不必編寫自定義驗證器。這是爲您完成的,只是您需要在刀片視圖中顯示該錯誤。請讓我知道,如果這是你正在尋找的答案,如果你需要更多的澄清只是問。 :) – MaXi32

+0

是的,在問題中明確指出這是針對登錄用戶的。是的,他們是在auth系統中創建的。 –