Laravel的注册错误地保存了密码

问题描述 投票:1回答:2

我正在使用Laravel 5.5,我最近修改了注册过程。这是注册:

$user =  User::create([
            'gender' => $data['gender'],
            'first_name' => $data['first_name'],
            'last_name' => $data['last_name'],
            'email' => $data['email'],
            'status' => 'inactive',
            'password' => Hash::make($data['password'])
        ]);

到目前为止工作正常。但是,当我尝试使用我最近创建的帐户登录时,它总是告诉我密码错误,我不明白为什么。我不确定它最初是Hash::make()还是bcrypt(),因为它们不同,我想登录一定有问题。

如果我使用bcrypt Tinker密码并将其插入数据库,我就可以登录了。我想要修改“登录代码”,但是,我找不到任何类似于注册查找过程的内容,这会让我改变使用的哈希算法进行登录,那么这种情况下的方法是什么?

编辑:我把这个代码放在$user = User::create([])上面:

dd($data['password'], bcrypt($data['password']), Hash::make($data['password']));

这是输出:

“Testtesttest123456”

“$ 2Y $ 10 $ y9bl5muW5AmmMZMMEWL0Qucy7RSfCSzgWXl29PiX2gPRFd3jnNeEC”

“$ 2Y $ 10 $ tez1W8fIwpksgpjsZmQqPuYIN4QTtiddhaCnc5zQ2MgeYATiQd9Ym”

用户模型(根据要求):

class User extends Authenticatable
{
    use Notifiable, HasRoles;

    const STATE_ACTIVE   = 'active';
    const STATE_INACTIVE = 'inactive';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'first_name', 'last_name', 'email', 'password', 'status', 'profile_pic', 'api_token', 'activation_code'
    ];

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

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

    public function setEmailAttribute($email)
    {
        $this->attributes['email'] = strtolower($email);
    }
}
laravel authentication
2个回答
2
投票

你是双重密码密码。你有一个哈希密码的mutator。在将密码传递给create之前,您还要对密码进行哈希处理。

您可以选择删除该mutator,也可以在将密码分配给模型之前不对其进行哈希处理(因为分配它会导致mutator运行)。任何一个都没关系你只需要知道你要走哪条路。

最有可能只有2个地方的密码无论如何都要进行哈希处理,所以它真的不是那么大的问题。

注册和更改密码/配置文件类型路由基本上是您将密码密码的唯一位置。


0
投票

如果您没有对控制器中的登录/注册进行任何操作,那么这应该可行

$user =  User::create([
    'gender' => $data['gender'],
    'first_name' => $data['first_name'],
    'last_name' => $data['last_name'],
    'email' => $data['email'],
    'status' => 'inactive',
    'password' => bcrypt($data['password'])
]);
© www.soinside.com 2019 - 2024. All rights reserved.