Php 如果密码输入为Laravel 5.2中的当前密码,则填写post

Php 如果密码输入为Laravel 5.2中的当前密码,则填写post,php,forms,validation,laravel,laravel-5.2,Php,Forms,Validation,Laravel,Laravel 5.2,我试图检查输入的密码是否为当前登录的用户密码,如果不是,则给出错误消息 我有个人资料编辑表,包括姓名、电子邮件等 表单中的最后一个输入是密码输入 如何检查输入的密码是否为当前密码 在EditProfileRequest中,我尝试了(自定义请求文件,由artisan制作): 但它拒绝了使用正确密码的表单。 然后,我尝试将此部分添加到控制器: if (!Hash::check(Input::get('password'), Auth::user()->password)) {

我试图检查输入的密码是否为当前登录的用户密码,如果不是,则给出错误消息

我有个人资料编辑表,包括姓名、电子邮件等

表单中的最后一个输入是密码输入

如何检查输入的密码是否为当前密码

在EditProfileRequest中,我尝试了(自定义请求文件,由artisan制作):

但它拒绝了使用正确密码的表单。 然后,我尝试将此部分添加到控制器:

if (!Hash::check(Input::get('password'), Auth::user()->password)) {
        return Redirect::back()->withInputs();
    }

这很有效,但我没有收到任何用户错误,我不知道如何添加自定义错误消息,因为我使用的是内置验证器。

您可以按如下方式传递自定义错误消息

$validator = Validator::make(Input::all(), $rules);
//Here you are checking your inputs with the validation rules that you are created. 

if ($validator->fails())
{
    //If the validation fails, check for the password validation too and return the error. 
    if (!Hash::check(Input::get('password'), Auth::user()->password)) {
        return Redirect::back()
                          ->withInputs()
                          ->withErrors(['login' => 'Your custom Error Msg'])
                          ->withErrors($validator);
    }
    else{
               return Redirect::back()
                          ->withInputs()
                          ->withErrors(['login' => 'Your custom Error Msg']);
   }
}
作为您问题的简短回答,以获取自定义错误消息:

return Redirect::back()->withInputs()->withErrors(['login'=>'custom msg']);

还要确保在登录页面中显示错误

@if (count($errors) > 0)
<div class="alert alert-danger">
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
</div>
@endif
@if(计数($errors)>0)
    @foreach($errors->all()作为$error)
  • {{$error}}
  • @endforeach
@恩迪夫

您可以检查此页面上显示的验证错误

我删除了“withErrors($validator)”和“withInputs()”,并将“['login'”、“您的自定义错误消息”]”更改为“['login'=>“您的自定义错误消息”]”并使其正常工作,而且所有其他输入都是正确的(更改前的)。为什么OP“尝试此操作”?一个好的答案总会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。@JayBlanchard:我能理解,但我总是在初次提交后编辑我的答案。我同意,我也希望有解释,就像这个验证器::make覆盖了内置的验证器,人们应该把它放在哪里。
Validation::make
没有覆盖任何内容。它只是使用您为特定模型创建的规则执行验证。这不是登录页面,而是问题描述中所述的配置文件编辑表单。我已经实现了这个部分,谢谢。我明白了。您的表单是否有csrf_令牌字段?是的,已运行。(见吉尔森·托马斯的回答和我对问题的评论)很高兴它起作用了。我真的很想对这个答案发表评论,但我的声望还不够。所以现在尝试帮助更多的人:)所以最后我使用:
if(!Hash::check(Input::get('password'),Auth::user()->password)){return Redirect::back()->withErrors(['password'=>'error password']);}
@if (count($errors) > 0)
<div class="alert alert-danger">
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
</div>
@endif