首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >API强制登录Laravel

API强制登录Laravel
EN

Stack Overflow用户
提问于 2018-11-05 12:13:37
回答 2查看 936关注 0票数 0

我正在为一个政府机构开发一个API,它们需要一些条件,比如:

基本身份验证,使用哈希:

代码语言:javascript
复制
$pass = 'password';
$hash_pass = sha256($pass.date('Y-m-d'));
$full_hash = base_64('username'.':'.$hash_pass);

所以,他们给我发了一个标题授权,比如:

基本$full_hash

在我的中间件上,我使用的是:

代码语言:javascript
复制
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->密码进行比较:

代码语言:javascript
复制
        if($data['password'] == hash("sha256", $user_db->password.$today, false))

好吧..。谢谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-06 11:19:25

我不知道我做得对不对..。

但我“解决了”这个问题,将原始密码保留在数据库中,并比较如下:

代码语言:javascript
复制
if($data['password'] == hash("sha256", $user_db->password.$today, false)){

     \Auth::login($user_db);

}
票数 1
EN

Stack Overflow用户

发布于 2018-11-05 12:27:05

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

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

但是,不要将密码以明文形式存储在数据库中。永远不会!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53154213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档