我正在为一个政府机构开发一个API,它们需要一些条件,比如:
基本身份验证,使用哈希:
$pass = 'password';
$hash_pass = sha256($pass.date('Y-m-d'));
$full_hash = base_64('username'.':'.$hash_pass);所以,他们给我发了一个标题授权,比如:
基本$full_hash
在我的中间件上,我使用的是:
public function handle($request, Closure $next)
{
$authorization_code = explode(" ", $request->header('Authorization'));
$hash = base64_decode($authorization_code[1]);
$user = explode(":", $hash);
$data['username'] = $user[0];
$user_db = User::where('username', $data['username'])->first();
$data['password'] = $user[1];
$today = date('Y-m-d');
$request->headers->set('php-auth-user', $data['username']);
$request->headers->set('php-auth-pw', $data['password']);
return $response = auth()->basic('username') ?: $next($request);
}在我的数据库里,密码是用bcrypt加密的。
我的问题是:有办法强制登录吗?用我自己的逻辑?
如果我不加密数据库中的密码,可以使用以下方法将$data' password‘与$user_db->密码进行比较:
if($data['password'] == hash("sha256", $user_db->password.$today, false))好吧..。谢谢大家!
发布于 2018-11-06 11:19:25
我不知道我做得对不对..。
但我“解决了”这个问题,将原始密码保留在数据库中,并比较如下:
if($data['password'] == hash("sha256", $user_db->password.$today, false)){
\Auth::login($user_db);
}发布于 2018-11-05 12:27:05
您绝对不应该将密码以明文形式存储在数据库中。
您应该创建一个API密钥表,其中API密钥属于用户,并使用该表进行身份验证。然后,您可以撤销、监视等每个密钥的使用。
但是,不要将密码以明文形式存储在数据库中。永远不会!
https://stackoverflow.com/questions/53154213
复制相似问题