数据库
首页 > 数据库> > php-Laravel中没有数据库的JWT身份验证

php-Laravel中没有数据库的JWT身份验证

作者:互联网

我对Laravel 5.x中的身份验证有疑问.我一直在专门研究tymondesigns / jwt-auth和irazasyed / jwt-auth-guard程序包,以在Laravel应用程序中进行JSON Web令牌认证和令牌处理.

我既不使用本地数据库,也不想使用.我在.env中为我的API的网址USERNAME&设置了环境变量.密码. Guzzle PHP HTTP客户端可以根据需要在API和我的应用程序之间很好地连接和返回数据.

但是,我需要在Laravel实例中设置身份验证.这是我遇到问题的地方,并且验证需要数据库连接…

$token = JWTAuth::attempt($credentials)

这是例外:

06001

>如何在不使用数据库的情况下使用JWT?
>如何完全关闭Laravel中的数据库连接?

谢谢.

更新:

使用tymon / jwt-auth,我已经在路由,内核,中间件等内部进行了设置.

我成功创建了一个“声明”,但是我需要通过编码“有效载荷”来创建令牌.

<?php
    $this->username = $request->username;

    $sub = $this->username;
    $iat = time();
    $jti = md5($sub . $iat);
    $aud = env('APP_URL');

    $this->claims = [
        'sub' => $sub,
        'iat' => $iat,
        'exp' => time() + (2 * 7 * 24 * 60 * 60),
        'nbf' => $iat,
        'iss' => 'khill',
        'jti' => $jti,
        'aud' => $aud,
    ];

    $payload = JWTFactory::make($this->claims);
?>

如何获得自定义令牌?

解决方法:

您应该定义一个自定义的身份验证提供程序,并在config / jwt.php中进行设置.

提供者的例子

将此课程放在您喜欢的任何地方.

namespace MyNamespace;

use Tymon\JWTAuth\Providers\Auth\AuthInterface;

class MyCustomAuthenticationProvider implements AuthInterface
{
    public function byCredentials(array $credentials = [])
    {
        return $credentials['username'] == env('USERNAME') && $credentials['password'] == env('PASSWORD');
    }

    public function byId($id)
    {
        // maybe throw an expection?
    }

    public function user()
    {
        // you will have to implement this maybe.
    }
}

配置示例

在config / jwt.php中的providers数组中,更改以下内容:

'auth' => 'Tymon\JWTAuth\Providers\Auth\IlluminateAuthAdapter',

对此:

'auth' => 'MyNamespace\MyCustomAuthenticationProvider',

其他注意事项

>在任何地方都不能使用env()函数.最好在配置文件中使用它,然后在其他任何地方使用config()函数.
>您可能还需要重新实现用户提供者.

标签:guzzle,laravel,laravel-5-2,jwt,php
来源: https://codeday.me/bug/20191118/2029058.html