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

Laravel 5.2-通过身份验证的用户更改密码-更新后的密码匹配问题

董飞
2023-03-14

所以我有一个很奇怪的问题。我创建了一个表单,允许用户更改密码。

它确实改变了他们的密码。但是它把他们的密码改成了Laravel显然无法识别的东西。

因此,如果我使用“修补匠”手动将密码更新为类似“测试”的东西;我将能够成功地更改我的密码。但是,一旦我将密码更改为某物(例如123456),表单将不接受密码。

当我注销用户并尝试使用新密码登录时;它不允许我登录。

很明显,拉威尔没有识别新密码。

代码如下:

视图:

<div class="panel panel-default">
        <div class="panel-heading">Change Your Password</div>
            {{ Form::open(array('url' => 'security/change_password')) }}
                <div class="form-group">
                    {!! Form::label('current_password', 'Enter Current Password:') !!}
                    {!! Form::text('current_password', null, ['class'=>'form-control']) !!}
                </div>

                <div class="form-group">
                    {!! Form::label('password', 'Enter New Password:') !!}
                    {!! Form::text('password', null, ['class'=>'form-control']) !!}
                </div>

                <div class="form-group">
                    {!! Form::label('password_confirmation', 'Confirm New Password:') !!}
                    {!! Form::text('password_confirmation', null, ['class'=>'form-control']) !!}
                </div>

                <div class="form-group">
                    {!! Form::submit('Change Password', ['class' => 'btn btn-primary form-control']) !!}
                </div>                  
            {!! Form::close() !!}

    </div>

控制器:

public function updatePassword(UserSecurityFormRequest $request)
{

    $user = Auth::user();
    $current_password = $request->input('current_password');
    $new_password = $request->input('password');
    if (Hash::check($current_password, $user->password)) {
        $user->fill([
                'password' => Hash::make($request->newPassword)
            ])->save();
    }
    else{
        return ('Please enter the correct password');
    }
}

我还尝试在用户中设置密码属性。。

public function setPasswordAttribute($password) 
{ 
    return $this->attributes['password'] = bcrypt($password); 
}

那没用。(编辑:然后我删除了上面的属性)如果它阻止注册表单(作为Laravel默认身份验证系统的一部分)创建登录表单可以识别的密码。

我已经检查过,以确保表单提交了正确的详细信息。当表单成功提交时,我通过转储表单输入中的所有数据来做到这一点。

用户模型:

<?php

名称空间应用程序;使用碳\碳;

使用Illumb\Foundation\Auth\User作为可验证的//使用App\Http\Controllers\traits\HasRoles;

类用户扩展可验证的{

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

//If register dont work or passwords arent being recognised then remove the following:

/* public function setPasswordAttribute($password) 
{ 
    return $this->attributes['password'] = bcrypt($password); 
}*/

//turns dates to carbon
protected $dates = ['created_at'];

     //Creates Many to Many Relationship between Users table (and model) and Roles Table (and model)
public function roles()
{
    return $this->belongsToMany(Roles::class);
}


//Checks for a specific role
public function hasRole($role)
{
    if(is_string($role))
    {
        return $this->roles->contains('name', $role);
    }

    return !! $role->intersect($this->roles)->count();
}

//gives the user the role
public function assignRole($role)
{
    return $this->roles()->save(
        Roles::whereName($role)->firstOrFail()
    );
}

//Checks whether the user has a role with that permission
public function hasPermission($permission)
{
    return $this->hasRole($permission->roles);
}

public function owns($related)
{
    return $this->id === $related->user_id;
}

}

如您所见,我已经注释掉了密码的属性设置器,这样就不会影响它。但它仍然不起作用。

任何帮助都将不胜感激。

非常感谢。

编辑

它不起作用。非常感谢所有回应的人,感谢@Steve Bauman让我发现了我的错误

工作函数:公共函数updatePassword(UserSecurityForm请求$请求){

    $user = Auth::user();
    $hashed_password = Auth::user()->password;
    $current_password = $request->input('current_password');
    $new_password = $request->input('password');
    if (Hash::check($current_password, $hashed_password)) {
        $user->fill([
                                'password' => Hash::make($request->password)

            ])->save();
    }
    else{
        return ('Please enter the correct password');
    }
}

共有3个答案

松高爽
2023-03-14

尝试使用以下方法

bcrypt($request->newPassword);
干宏邈
2023-03-14

首先在Hash::make($request)中进行双密码hasing-

去掉一个,一切都会好的。

东方建修
2023-03-14

发现您的问题:

public function updatePassword(UserSecurityFormRequest $request)
{

    $user = Auth::user();

    $current_password = $request->input('current_password');

    $new_password = $request->input('password');

    if (Hash::check($current_password, $user->password)) {

        $user->fill([

                // This should be $request->password, not `$request->newPassword`

                'password' => Hash::make($request->newPassword)

            ])->save();

    } else {
        return ('Please enter the correct password');
    }
}

请求的变量newPassword将为空,这就是密码不起作用的原因。您要查找的请求字段是password

这是由于表单字段使用密码作为输入名称造成的。

 类似资料:
  • 我正在尝试使用WLS 12.1.2(JAAS容器安全)中的AD身份验证器来处理这样的场景:用户被设置为“下一次登录时必须更改密码”,我知道这是在AD属性pwdlastset中设置的。如果我将特定用户的值设置为0,然后尝试登录到我的应用程序,我会在javax.servlet.http.HttpServletRequest.login(username,password)方法上得到一个ServletE

  • 问题内容: 当密码包含问号char时,我无法更改用户密码。到目前为止,我在使用其他任何char时都没有遇到这个问题,这似乎是问号char所特有的。 如果我使用以下sql 更改sqlplus中的用户密码:然后它成功更改了密码,我可以使用新密码“ NewPassword?”登录。 但是,如果我通过jdbc执行相同的SQL: 然后,我将无法使用密码“ NewPassword?”登录。 通过sqlplus

  • 当我运行应用程序并尝试在其中登录时,系统返回到登录页面,即使使用正确的登录密码(我确信)。 谁都能看出这里出了什么问题? 更新

  • 我更改了Apache Sling身份验证服务匿名帐户用户密码并启用了匿名访问。我还进入了匿名用户,并更改了帐户密码以匹配。 不幸的是,在这一更改之后,对登录页面的访问被锁定,原因是持续推送到http://localhost:8080/um/login,以及与AEM相关的任何网址的403错误,即“本网站要求您登录”。JEE链接(LiveCycle)仍然有效。即: /adminui. 有没有办法“工厂

  • 本文向大家介绍更改Mysql root用户密码,包括了更改Mysql root用户密码的使用技巧和注意事项,需要的朋友参考一下 新下载了mysql,口令为空,如何修改root口令: 首先登陆mysql 注意需要 flush privileges; 更改Mysql root用户口令的内容小编就给大家介绍到这里,希望对大家有所帮助!

  • 我试图为我用JavaScript制作的密码验证程序开发一个regex表达式。 要求 null