【问题标题】:Laravel 4 reset passwordLaravel 4 重置密码
【发布时间】:2015-05-18 21:24:35
【问题描述】:

我从 laravel 文档中复制了一个示例:

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('/');
    });
}

但似乎返回 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个字符)的规则写在哪里?我可以更改它们吗?

【问题讨论】:

标签: php laravel laravel-4


【解决方案1】:

回答为什么您的第一个代码示例不起作用是因为如果您查看app/routes.php 文件,您应该会看到类似于Route::get('/', 'HomeController@index'); 的内容。 @ 符号之前的部分是控制器的名称,而它之后的部分是请求路由时在控制器中调用的方法。确保已定义该方法。

看了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')
        );

传递的第二个数组是您可以修改验证器规则的地方。

【讨论】:

  • '/' 是正确的路线。原因是当我收到错误时(假设用户没有输入任何密码或电子邮件不存在) Password::reset 不会转到匿名函数并返回到相同 URI 的重定向(我猜) .当用户输入正确的值时,匿名函数工作并返回重定向到'/'。对我来说奇怪的是,当我收到验证错误时要控制重定向,我需要使用 setTargetUrl 来返回重定向(比如 $redirect = Password::reset(...); $redirect->setTargetUrl('some page where I want显示错误');
  • 关于密码验证(我的第二个问题) - 我知道如何使用验证类,但是当我使用 Password::reset 方法时,它会检查密码是否至少有 6 个字符,但是那个设置大约 6字符?其实我想把它改成8。如果它在文档中,我的错误,但我还没有找到它。
  • @Victor 希望我刚刚所做的编辑对您的第二个问题有所帮助。
【解决方案2】:

回答关于更改密码验证规则的第二个问题。

Password 门面扩展了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 
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2016-04-22
    • 2015-05-27
    • 2017-08-04
    • 2020-10-01
    • 2018-07-15
    • 2014-08-14
    相关资源
    最近更新 更多