验证不起作用Laravel自定义身份验证加密密码



我创建了一个注册系统,其中密码以脚本形式存储。但是,当我试图验证登录的目的,它说错误的密码。我的验证代码如下所示:

public function authenticate(Request $request){
$email=$request->post('email');
$password=$request->post('password');
$result=Admin::where(['email'=>$email,'password'=>$password])->get();
if(isset($result['0']->id)){
$request->session()->put('ADMIN_LOGIN',true);
$request->session()->put('ADMIN_ID',$result['0']->id);
return redirect('admin');
}else{
$request->session()->flash('error','Please enter valid login details');
return redirect('admin-login');
}
}

您不需要构建自己的身份验证系统,但流程如下:

use AppModelsAdmin;
use Hash;
...
public function authenticate(Request $request)
{
...
if ($user = Admin::where($request->only('email'))->first()) {
if (Hash::check($request->input('password'), $user->password)) {
// login
}
}
// not authenticated
}

您必须通过标识符找到用户,因此这里使用'email'。您无法查询密码,因为它是散列。如果您从查询中获得一个用户,那么您可以对提交的密码和记录中的用户密码进行哈希检查。

这是SessionGuard::attempt/Auth::attempt([...])正在做的事情的简化版本。

你必须像这样通过电子邮件找到管理员:

$admin = Admin::where(['email'=>$email])->first();

,然后比较哈希值

if ($admin && Hash::check($admin->password, $password)) {
// ... logged in
} else {
// ... not legged in
}

当您的请求被处理时,密码以纯文本形式出现,而数据库中的密码是散列的。所以你必须输入bcrypt哈希您的密码首先正确地进行查询。

您可以:

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

或:

$password = bcrypt($request->post('password'));

Hash和bcrypt辅助函数的工作方式相同

最新更新