Php 为什么Hash::check总是返回false?
我想,在我的第一个控制器中,我使用了创建用户密码的最基本方法 员工控制员Php 为什么Hash::check总是返回false?,php,laravel,hash,Php,Laravel,Hash,我想,在我的第一个控制器中,我使用了创建用户密码的最基本方法 员工控制员 public function store(Request $request){ $user = User::create(array( 'username' => $request->username, 'password' => Hash::make($tempPassword = Str::random(8)))
public function store(Request $request){
$user = User::create(array(
'username' => $request->username,
'password' => Hash::make($tempPassword = Str::random(8)))
);
$employee->user()->associate($user);
$employee->save();
}
public function index(ResetPasswordRequest $request){
$request->validated();
$emp = Student::find($request->id);
if ($emp->user->checkCredentials($request->password)) { //always false
}
}
public function index(ResetPasswordRequest $request){
$request->validated();
$emp = Student::find($request->id);
$emp->user->update(['password' => Hash::make('abc')]);
if ($emp->user->checkCredentials('abc')) { //...true
}
}
public function checkCredentials($password){
return (Hash::check($password, $this->password)) ? true : false;
}
在第二个控制器中,使用Hash::check()
检查密码总是失败
重置密码控制器
public function store(Request $request){
$user = User::create(array(
'username' => $request->username,
'password' => Hash::make($tempPassword = Str::random(8)))
);
$employee->user()->associate($user);
$employee->save();
}
public function index(ResetPasswordRequest $request){
$request->validated();
$emp = Student::find($request->id);
if ($emp->user->checkCredentials($request->password)) { //always false
}
}
public function index(ResetPasswordRequest $request){
$request->validated();
$emp = Student::find($request->id);
$emp->user->update(['password' => Hash::make('abc')]);
if ($emp->user->checkCredentials('abc')) { //...true
}
}
public function checkCredentials($password){
return (Hash::check($password, $this->password)) ? true : false;
}
但是,如果在同一个控制器中更新密码(仅用于测试),它就可以正常工作
重置密码控制器
public function store(Request $request){
$user = User::create(array(
'username' => $request->username,
'password' => Hash::make($tempPassword = Str::random(8)))
);
$employee->user()->associate($user);
$employee->save();
}
public function index(ResetPasswordRequest $request){
$request->validated();
$emp = Student::find($request->id);
if ($emp->user->checkCredentials($request->password)) { //always false
}
}
public function index(ResetPasswordRequest $request){
$request->validated();
$emp = Student::find($request->id);
$emp->user->update(['password' => Hash::make('abc')]);
if ($emp->user->checkCredentials('abc')) { //...true
}
}
public function checkCredentials($password){
return (Hash::check($password, $this->password)) ? true : false;
}
用户
public function store(Request $request){
$user = User::create(array(
'username' => $request->username,
'password' => Hash::make($tempPassword = Str::random(8)))
);
$employee->user()->associate($user);
$employee->save();
}
public function index(ResetPasswordRequest $request){
$request->validated();
$emp = Student::find($request->id);
if ($emp->user->checkCredentials($request->password)) { //always false
}
}
public function index(ResetPasswordRequest $request){
$request->validated();
$emp = Student::find($request->id);
$emp->user->update(['password' => Hash::make('abc')]);
if ($emp->user->checkCredentials('abc')) { //...true
}
}
public function checkCredentials($password){
return (Hash::check($password, $this->password)) ? true : false;
}
我不会在创建和检查用户密码之间更改应用程序密钥。还有什么好主意吗?
Hash::check(新密码
应该以$
开头。这是真实的密码吗?什么是$password
?我只看到$old\u password
,它是123
,你正在检查$old\u password
,而$old\u password
不是$password
。你的变量和逻辑到处都是…对不起,伙计们,只是那些例子中的拼写错误。我更新到了更可读的版本view@FelippeDuarte不,它只是我的一个模式,$user->create()
不应该使用$user
,它应该是user::create()
(一个新的用户
实例)。并确保您在第二个控制器中检索到正确的用户。您创建的用户似乎没有任何唯一标识符(即电子邮件)。发布您使用的确切代码可能符合您的最佳利益,包括如何创建用户、如何检索用户、如何定义密码(通过用户输入等)。您的代码应该可以工作,但有一些假设可能是真的,也可能不是真的。。。