Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么Hash::check总是返回false?_Php_Laravel_Hash - Fatal编程技术网

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()
(一个新的
用户
实例)。并确保您在第二个控制器中检索到正确的用户。您创建的用户似乎没有任何唯一标识符(即电子邮件)。发布您使用的确切代码可能符合您的最佳利益,包括如何创建用户、如何检索用户、如何定义密码(通过用户输入等)。您的代码应该可以工作,但有一些假设可能是真的,也可能不是真的。。。