【问题标题】:Laravel Validation of password failed, when it must be ok. Why?Laravel 验证密码失败,当它必须没问题时。为什么?
【发布时间】:2021-11-20 19:50:32
【问题描述】:
$validator = Validator::make($request->all(), [
                'email' => 'required|min:9|max:50|email',
                'password' => 'required|min:8|max:255|password'
            ]);

            if ($validator->fails()) {
                echo "Failed! Sorry :(";
                Session::flash('error', $validator->messages()->first());
                //return Redirect::back()->withErrors($validator);
            }
            else {...

但如果我写

'password' => 'required|min:8|max:255' 

验证通过了,但是当我写的时候

'password' => 'required|min:8|max:255|password'  

它没有通过,结果是“失败!对不起:(”。我的意思是我上面写的回声有效。
可能是什么问题?还是“密码”过多?我是 Laravel 的新手。

重要!数据库中的密码正在被哈希保存。

【问题讨论】:

  • if ($validator->fails(){ dd($validator->errors()); };这应该告诉你为什么你的验证失败了,所以你可以进一步调试它????
  • 谢谢。但它说我已经知道我自己的逻辑,问题是密码不正确。但事实是密码在现实中是正确的,只是代码不想同意。
  • password 规则检查当前经过身份验证的用户。如果您在登录时使用它,当当前没有经过身份验证的用户时,这将不起作用。删除password 规则,验证存在/长度,然后在验证后使用auth()->check()
  • auth()->check() 获取电子邮件/用户名和未经哈希处理的密码,并检查这是否是尝试登录的用户的正确密码。你可以做类似if(!auth()->check($request->input('email'), $request->input('password')){ return back()->with('error', 'Incorrect Password'); }
  • 我可能有错误的方法,attempt 而不是check,必须仔细检查,但这是一般的想法;验证存在/长度,检查是否正确,登录。

标签: php laravel validation


【解决方案1】:

password 验证规则根据当前已验证用户的密码检查正在验证的字段。因此,如果您只想检查它的长度,则不应使用它。如果您想要更具体的验证规则,可以使用正则表达式。例如,此规则检查给定密码是否至少包含一个小写字母、一个大写字母和一个数字,并且长度不应小于 8:

'password' => 'required|min:8|regex:#(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])#'

【讨论】:

    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 2018-05-20
    • 2017-03-20
    • 2017-07-11
    • 2015-07-11
    • 2020-09-21
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多