API强制登录Laravel

时间:2018-11-05 12:13:38

标签: laravel api authentication

我正在为政府机构开发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-> password进行比较:

        if($data['password'] == hash("sha256", $user_db->password.$today, false))

好吧。谢谢大家!

2 个答案:

答案 0 :(得分:1)

您绝对不应在数据库中以明文形式存储密码。

您应该创建一个API密钥表,其中API密钥属于用户,并使用该表进行身份验证。然后,您可以撤消,监视每个键的使用情况。

但是,请勿在数据库中以明文形式存储密码。永远!

答案 1 :(得分:1)

我不知道我做对了吗。

但是我“解决”了这一问题,将原始密码保留在数据库中,并进行了类似的比较:

if($data['password'] == hash("sha256", $user_db->password.$today, false)){

     \Auth::login($user_db);

}