2013-11-27 58 views
1

我使用的是Laravel 4密碼提醒功能,如此處所述:http://four.laravel.com/docs/security#password-reminders-and-reset。爲了生成令牌,發送電子郵件,並在password_reminder表中創建DE數據庫記錄,我用的是標準的代碼在我的路線文件:Laravel 4密碼提醒:重定向問題

Route::post('password/remind', function() { 
    $credentials = array('email' => Input::get('email')); 
    return Password::remind($credentials); 
}); 

此代碼是假設送我到我的輸入如有任何錯誤(例如未知的電子郵件地址)。相反,我得到一個MethodNotAllowedHttpException。原因是Laravel不會嘗試將我發送回我的表單URL(它是/password/forgot):他試圖將我重定向到/password/remind,在GET中,並且此路由在我的routes.php文件中不存在(當然)。

我查了Illuminate\Auth\Reminders\PasswordBroker類,它是負責這個重定向的代碼,並發現了這種方法:

protected function makeErrorRedirect($reason = '') 
{ 
    if ($reason != '') $reason = 'reminders.'.$reason; 
    return $this->redirect->refresh()->with('error', true)->with('reason', $reason); 
} 

我換成$this->redirect->refresh()通過$this->redirect->back(),一切現在工作爲例外。但是,由於我無法在任何地方發現此錯誤的任何評論,我認爲我做錯了什麼......但我找不到什麼!

這裏是我的routes.php文件文件:

Route::get('password/forgot', array('as' => 'forgot', 'uses' => '[email protected]')); 
Route::post('password/remind', function() { 
    $credentials = array('email' => Input::get('email')); 
    return Password::remind($credentials); 
}); 
Route::get('password/reset/{token}', function($token) { 
    return View::make('sessions.reset')->with('token', $token); 
}); 
Route::post('password/reset/{token}', array('as' => 'reset', 'uses' => '[email protected]')); 

我SessionsController相關代碼:

class SessionsController extends BaseController { 

    [...] 

    public function forgot() { 
     return View::make('sessions.forgot'); 
    } 

    public function reset() { 
     $credentials = array(
      'email' => Input::get('email'), 
      'password' => Input::get('password'), 
      'password_confirmation' => Input::get('password_confirmation') 
     ); 

     Input::flash(); 

     return Password::reset($credentials, function($user, $password) { 
      $user->password = Hash::make($password);    
      $user->save(); 
      return Redirect::to('home'); 
     }); 
    } 

} 

,最後我的視圖代碼:

{{ Form::open(array('url' => 'password/remind', 'class' => 'form', 'role' => 'form', 'method'=>'post')) }} 
    <div class="form-group"> 
     {{ Form::label('email', 'E-mail') }} 
     {{ Form::text('email', '', array('autocomplete'=>'off', 'class' => 'form-control')) }} 
    </div> 
    {{ Form::submit("Envoyer", array("class"=>"btn btn-primary")) }} 
{{ Form::close() }} 
+0

谷歌上搜索了一下後,我發現這一點:http://culttt.com/2013/09/23/password-reminders-reset-laravel -4 /在第一條評論中,他們得到了同樣的錯誤。有人說,將路線從關閉轉移到控制器解決了錯誤。也許你可以試試看看會發生什麼。 –

+0

@ManuelPedrera感謝您的建議。我嘗試過,沒有成功... – Philippe

回答