JWT和PHP:验证传递的令牌(Lcobucci \ JWT)

时间:2019-09-03 21:31:09

标签: php jwt jwt-auth

我正在尝试学习如何将JWT令牌从ReactJS传递到我的PHP API。我目前有2个功能:身份验证功能,用于检查用户名和密码,然后生成并传递令牌。生成部分似乎可以正常工作,但是当我将令牌传递回授权承载中时,我无法对其进行验证。我正在使用Lcobucci \ JWT库。

这是我的代码:

 public function attempt_login($input){
            $time = time();
            $token = (new Builder())->issuedBy('https://api.example.com')
            ->permittedFor('https://example.com') 
            ->identifiedBy('4f1g23a12aa', true) 
            ->issuedAt($time) 
            ->canOnlyBeUsedAfter($time + 60) 
            ->expiresAt($time + 3600) 
            ->withClaim('uid',1) 
            ->getToken(); 
            return $token;
    }

    public function find($headers){
        $auth = $headers['Authorization'];
        if (preg_match('/Bearer\s(\S+)/', $auth, $matches)) {
            $token = (new Parser())->parse((string) $matches[1]);
            $data = new ValidationData();
            $data->setIssuer('https://api.example.com');
            $data->setAudience('https://example.com');
            $data->setId('4f1g23a12aa');
            dd($token->validate($data));
        }else{
            dd('nope');
        }
    }

当我倾倒而死时,我总是会虚假。我有95%的把握确定自己做错了一切,但是有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果您要立即检查有效性,则需要进行更改

canOnlyBeUsedAfter($time + 60)

简单

canOnlyBeUsedAfter($time)

否则,您需要等待60秒钟才能生效。