当前位置: 首页 > 知识库问答 >
问题:

使用Laravel 5.1检查密码输入是否与存储的密码匹配

方风华
2023-03-14

一旦用户登录到我的应用程序,我想给他们改变密码的可能性。我创建了三个输入字段(password_new,password_new_confirmation,password_old)。在我的表单请求中,我有以下规则,但它不起作用:

  $rules['password_new'] = 'required|confirmed|min:6';
  $rules['password_old'] = 'required|exists:users,password,email,'. Auth::user()->email;

这可能是因为密码输入是不加密的,因为存储的密码是哈希格式的?

因此,我认为可能使用auth::validate facade,如下所示:

$valid = Auth::validate(['email' => Auth::user()->email, 'password' => Input::get('password_old')]);
if ( ! $valid)
{
    // add error to validator
}

我的问题是如何将错误添加到表单请求中的验证器实例以覆盖它-下面是验证器实例?

protected function getValidatorInstance()
{
    $factory = $this->container->make(ValidationFactory::class);
    if (method_exists($this, 'validator')) {
        return $this->container->call([$this, 'validator'], compact('factory'));
    }
    return $factory->make(
        $this->all(), $this->container->call([$this, 'rules']), $this->messages(), $this->attributes()
    );
}

当您手动创建验证程序时,您可以应用验证后钩子,如下所示,使用下面的方法如何覆盖上面的验证实例:

$validator->after(function($validator) {
    if (!Auth::validate(['email' => Auth::user()->email, 'password' => $this->input('password_old')) {
         $validator->errors()->add('password_old', 'Invalid password');
    }
 });

共有2个答案

闾丘高峰
2023-03-14

根据你的评论,我改变了我的答案。

要通过手动验证检查您的密码,您可以这样做:

$valid = $this->validate($request,[
    'email' => 'required|exists:users,email',
    'old_password' => 'required|exists:users,password'
]);

若要添加自己的自定义验证消息,请打开此文件

resources/lang/en/validation.php

查找以下代码:

'custom' => [
    'attribute-name' => [
        'rule-name' => 'custom-message',
    ],
],

custom中,您可以添加自己的验证消息。例子:

'custom' => [
    'email' => [
        'required' => 'You must give you Email address',
    ]
    'old_password' => [
        'exists' => 'Invalid password try again',
    ],
],

您可以使用:attribute而不是硬编码属性名称。例如:无效:属性重试您必须提供您的:属性地址

希望这能有所帮助。

章景同
2023-03-14

操作要求laravel 5.1,但对于使用laravel 6. x及以上版本的人,添加了密码验证规则。

检查其文件

只需将此规则添加到验证规则中:

'密码'=

您还可以指定身份验证保护:

'密码'=

 类似资料:
  • 因此,我用java编写寄存器和登录系统。我对注册的计划是:用户输入用户名,然后输入密码。 密码被存储在一个. txt文件中。现在,当用户必须输入登录系统的密码时,我如何从。txt文件自其加盐? 我的问题有两个:我如何盐密码,然后存储它。如何找回原来的密码,所以要检查一下。 我找了很多东西,但都没有找到。

  • 我正在尝试实现一段代码,检查hashed_password和user_name是否匹配。下面的代码首先检查用户名是否有效,如果有效,代码将检查密码是否与用户名匹配。但是,这是一段代码不起作用。我可以从数据库输入正确的用户名和相应的正确密码,它会显示正确的消息。但是如果我从数据库输入正确的用户名,但密码不正确,它仍然会显示。感谢任何帮助!

  • 在kubuntu上用存储的密码启动pgAdmin III,每次连接到数据库时都会要求输入密码,并给出错误“连接到服务器的错误:fe_sendauth:没有提供密码”。它忽略存储密码字段中的复选框。

  • 这是我明天为期中考试做的一些练习。我似乎找不到我的代码的问题,这就是问题所在: 当我们的许多信息存储在网上时,拥有一个安全的密码是非常重要的。按照以下规则编写一个验证新密码的程序: •密码长度必须至少为8个字符。 密码必须至少有一个大写字母和一个小写字母 • 密码必须至少有一位数字。 编写一个要求输入密码的程序,然后再次要求确认密码。如果密码不匹配或未满足规则,请再次提示。您的程序应包含一种检查密

  • 存储密码 用户名和密码组合必须存储在某处。以下列表提到了一些受欢迎的地方: 文字:你现在应该熟悉这种方法。 SQL数据库:FreeRADIUS包含与SQL数据库交互的模块。 MySQL非常受欢迎,并且广泛用于FreeRADIUS。 目录:Microsof的Actve目录或Novell的电子目录是典型的企业级目录。OpenLDAP是一种流行的开源替代方案。 FreeRADIUS可以使用的用户文件和S

  • 过去一段时间以来, 许多的网站遭遇用户密码数据泄露事件, 这其中包括顶级的互联网企业–Linkedin, 国内诸如CSDN,该事件横扫整个国内互联网,随后又爆出多玩游戏800万用户资料被泄露,另有传言人人网、开心网、天涯社区、世纪佳缘、百合网等社区都有可能成为黑客下一个目标。层出不穷的类似事件给用户的网上生活造成巨大的影响,人人自危,因为人们往往习惯在不同网站使用相同的密码,所以一家“暴库”,全部

  • 我试图检查密码,我加密之前,但我得到一个例外,我不知道为什么。 这里是我用来加密密码的方法: 加密工作成功。 此处为错误日志: 有什么想法吗?感谢你的帮助.

  • 使用 phpass 库来哈希和比较密码 经 phpass 0.3 测试,在存入数据库之前进行哈希保护用户密码的标准方式。 许多常用的哈希算法如 md5,甚至是 sha1 对于密码存储都是不安全的, 因为骇客能够使用那些算法轻而易举地破解密码。 对密码进行哈希最安全的方法是使用 bcrypt 算法。开源的 phpass 库以一个易于使用的类来提供该功能。 示例 <?php // Include ph