我正在使用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);
}
}
你是双重密码密码。你有一个哈希密码的mutator。在将密码传递给create
之前,您还要对密码进行哈希处理。
您可以选择删除该mutator,也可以在将密码分配给模型之前不对其进行哈希处理(因为分配它会导致mutator运行)。任何一个都没关系你只需要知道你要走哪条路。
最有可能只有2个地方的密码无论如何都要进行哈希处理,所以它真的不是那么大的问题。
注册和更改密码/配置文件类型路由基本上是您将密码密码的唯一位置。
如果您没有对控制器中的登录/注册进行任何操作,那么这应该可行
$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'])
]);