我使用的是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() }}
谷歌上搜索了一下後,我發現這一點:http://culttt.com/2013/09/23/password-reminders-reset-laravel -4 /在第一條評論中,他們得到了同樣的錯誤。有人說,將路線從關閉轉移到控制器解決了錯誤。也許你可以試試看看會發生什麼。 –
@ManuelPedrera感謝您的建議。我嘗試過,沒有成功... – Philippe