在laravel中使用jwt
jwt它的两大使用场景是:认证和数据交换
安装及基础配置
使用 composer 安装
composer require tymon/jwt-auth
在安装完成后,会生成这样一个目录
 
进行一些配置–只对laravel5.4以下的版本
这里值得注意的是,有些文档会说要添加Tymon\JWTAuth\Providers\LaravelServiceProvider::class ,这只在 Laravel 5.4
及以下版本是必要的,更新的 Laravel 版本无需添加。
发布配置文件
//这条命令会在 config 下增加一个 jwt.php 的配置文件
php artisan vendor:publish --
provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
生成配置成功后,会在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,就要在config\api中去配置
 找到’auth’=>[]这个配置
'auth' => [
        'jwt' => 'Dingo\Api\Auth\Provider\JWT',
    ],
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;
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号