2013-07-15 162 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 
});