2013-09-11 54 views
0

我正在构建一个密码重置机制,除了一个小奇怪的问题外,它工作得很好。如果在Password :: reset()部分调用,则Redirect::to('/login')不起作用。Laravel 4重定向::如果从密码中调用不起作用::重置

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

但是它的工作原理,如果我把它放在外面:

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

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

但在这种情况下,我如何验证用户的电子邮件属于实际令牌?

理想我想这样的事情

Password::reset($credentials, function($user, $password) { 
     $user->password = Hash::make($password); 
     $user->save(); 
     return Redirect::to('/login'); // success you may use your new password 
}); 
return Redirect::to('/reset'); // validation falied try one more time 

回答

4

检查docs on password resets小心 - 你会注意到,Password::reset()将返回你封的结果。您可以通过拨打Redirect::to电话完成此操作。

使用从你的问题的“理想”的版本,请注意添加return声明Password::reset()前右和验证检查的举动/呼叫重定向之前发生Password::reset()

if(! VALIDATION FAILED) 
{ 
    return Redirect::to('/reset'); // validation failed, try one more time 
} 

return Password::reset($credentials, function($user, $password) { 
     $user->password = Hash::make($password); 
     $user->save(); 
     return Redirect::to('/login'); // success, you may use your new password 
}); 

这里是看起来像在文档的例子:

enter image description here

+0

如果密码重置在这里失败,则关闭将不会被执行,并且密码重置::将重定向巴CK到同一页面。这样做会执行相同的密码检查,并在一个循环中再次重定向回到同一页面。大概需要在Password :: reset之前进行某种检查,以防万一我们来自错误,然后重定向回表单或仅在此页面中显示一条消息? – Jason

+0

请注意,在密码重置失败时,以上将立即重定向。将没有机会将输入数据闪烁到表单中以重新呈现给用户。为了解决这个问题,在调用'return Password :: reset(...)'之前做一个'Input :: flash();'。您不想重新显示密码及其确认,但它有助于再次显示用户的电子邮件:Form :: text('email'),Input :: old('email'))'。 – Jason