在laravel中使用jwt

jwt它的两大使用场景是:认证和数据交换

安装及基础配置

使用 composer 安装

composer require tymon/jwt-auth

在安装完成后,会生成这样一个目录

进行一些配置–只对laravel5.4以下的版本

这里值得注意的是,有些文档会说要添加TymonJWTAuthProvidersLaravelServiceProvider::class ,这只在 Laravel 5.4
及以下版本是必要的,更新的 Laravel 版本无需添加。

发布配置文件

//这条命令会在 config 下增加一个 jwt.php 的配置文件
php artisan vendor:publish --
provider="TymonJWTAuthProvidersLaravelServiceProvider"

生成配置成功后,会在config目录中生成这样一个配置文件

生成加密密钥
还有需要生成加密字段,会在.env中生成新的数据

php artisan jwt:secret

例如,生成了

JWT_SECRET=w5NpwYgUTGBt1lVufOhy40SDnRICjqOtTRWHSrdf2aOplnxRulMh26qjVzPNGA9P

更新模型
由于大多数jwt都是用来验证用户的,所以,这里我用user模型来测试

首先,需要要实现JWTSubject
例如:
class User extends Authenticatable implements JWTSubject
第二,既然是需要实现,那么就要在类中去实现它

/**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }

修改 auth.php
在config/auth.php中修改

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api'=>[
            'driver' => 'jwt',        // 原来是 token 改成jwt
            'provider' => 'users',
        ]
    ],

然后,我需要jwt可以使用Dingo,就要在configapi中去配置
找到’auth’=>[]这个配置

'auth' => [
        'jwt' => 'DingoApiAuthProviderJWT',
    ],

tymon/jwt-auth 是使用第三方来集成 JWT 身份验证的软件包。
一旦您安装了这个软件包,您就可以在 config/api.php 文件或者引导文件中配置该服务提供者

如果使用jwt的话,在登录成功后,会生成一段token,那怎么使用这段token呢

需要把它带到header头里面

看图,需要一个Authorization参数,其参数值是token类型再空一个格,后面就是token了
比如

Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9hcGkudGVzdFwvYXBpXC9sb2dpbiIsImlhdCI6MTYzMDkzNTQ0MywiZXhwIjoxNjMwOTM5MDQzLCJuYmYiOjE2MzA5MzU0NDMsImp0aSI6IjVESktaUExlMXpJM3pjQVQiLCJzdWIiOjEsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.EV5-n61uq8bcGFIciQzW5pHGEIwLHujHM7YNMdKIb3E

从token获取信息
都可以获取已登录用户信息,当然,前提是传递了token

//第一种写法
$user = app(Auth::class)->user();
        return $user;
//第二种写法
$user = auth('api')->user();
        return $user;
//第三种写法
$user = $this->auth->user();
return $user;

版权声明:
作者:linrux
链接:https://www.tot7.cn/technology/php/175.html
来源:阿信博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>