2013-07-15 159 views
1

我複製從laravel文檔的例子:Laravel 4重置密碼

public function postResetPassword() { 
    $credentials = array('email' => Input::get('email')); 

    return Password::reset($credentials, function($user, $password) { 
     $user->password = Hash::make($password); 

     $user->save(); 

     return Redirect::to('/'); 
    }); 
} 

但似乎那久違重定向到::(「/」)不工作,因爲不是主頁我得到一個錯誤,它告訴我們找不到控制器方法。 但如果我寫的代碼是這樣的:

$credentials = array('email' => Input::get('email')); 

    Password::reset($credentials, function($user, $password) { 
     $user->password = Hash::make($password); 

     $user->save(); 
    }); 

    return Redirect::back(); 

它的工作原理,但我不明白我怎麼會閃變量(其實我讓他們)。

另一個問題是關於密碼長度(6個字符)的規則寫在哪裏?我可以改變它們嗎?

+0

你叫什麼再問一次?我會建議你看看哨兵。你只要把它放進去,它爲你做了很多這種骯髒的工作。 http://docs.cartalyst.com/sentry-2/users/reset-password – kJamesy

+0

看起來好像密碼規則仍然是硬編碼的。看看這個答案的方法來改變它們:http://stackoverflow.com/q/16762840/1317935 – Laurence

回答

1

要回答你的第一個代碼示例不起作用的原因是因爲如果你看看你的app/routes.php文件,你應該看到一些沿着Route::get('/', '[email protected]');的行。 @符號之前的部分是控制器的名稱,而後面的部分是請求路由時在控制器中調用的方法。確保該方法已定義。

看完following後。我認爲你應該把重定向放在你給出的閉包中作爲返回語句。

然後,如何在重定向用戶後使用以下 Session::get('key');來檢索已刷新到會話的數據。

對於你的最後一個問題請看下面的documentation

實施例:

$validator = Validator::make(
      array('email' => Input::get('email'), 'password' => Input::get('password'), 'password_confirm' => Input::get('password_confirm')), 
      array('email' => 'required|unique:users,email|email', 'password' => 'required|min:3|max:20|same:password_confirm') 
     ); 

第二數組傳遞是其中可以修改驗證規則。

+0

'/'是正確的路線。原因是,當我得到一個錯誤(可以說用戶沒有輸入任何密碼或電子郵件不存在)密碼::重置不會去匿名函數並返回一個重定向到相同的URI(我猜) 。當用戶輸入正確的值時,匿名函數將工作並返回重定向到「/」。對我來說奇怪的是,當我得到驗證錯誤時,要控制重定向我需要使用setTargetUrl來返回重定向(如$ redirect = Password :: reset(...); $ redirect-> setTargetUrl('some page where I want以顯示錯誤'); – Victor

+0

關於密碼驗證(我的第二個問題) - 我知道如何使用驗證類,但是當我使用Password :: reset方法時,它會檢查密碼是否有最少6個字符,但設置約6個字符?其實我想把它改爲8.如果是在文檔中,我的錯誤,但我還沒有找到它 – Victor

+0

@Victor希望我剛剛做的編輯可以幫助你解決第二個問題。 – camelCaseD

0

回答關於更改密碼驗證規則的第二個問題。

密碼門面延伸PasswordBroker.php這對線路208這樣的功能:

/** 
* Set a custom password validator. 
* 
* @param \Closure $callback 
* @return void 
*/ 
public function validator(Closure $callback) 
{ 
    $this->passwordValidator = $callback; 
} 

因此,覆蓋默認的密碼驗證,只需從您的控制器此電話:

Password::validator(function(){ 
    //validator in here 
});