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