laravel 使用jwt的基本应用(适于初始jwt)

本人菜鸟 , 对jwt也是基本的认识,在自己的项目中也是基本的实现,这里是对初始jwt的小伙伴的分享,大佬请乘坐《和谐号》前往下一站

以下的观点(都是个人的浅浅理解)如有不对的地方欢迎指点~~~~~~~~

JWT(Json Web Tokens  ): 一个非常轻巧的规范, 适用于前端用户和服务之间传递安全可靠的信息,可以使用传递的信息认证当前登录用户信息   官方文档请点这里

第一步  使用composer安装jwt   在composer.json文档中添加(Laravel 5.5 + 版本会自动发现该扩展包)

 "require": {
        "php": ">=7.0.0",
        "fideloper/proxy": "~3.3",
        "laravel/framework": "5.5.*",
        "laravel/tinker": "~1.0",
        "tymon/jwt-auth": "1.*@rc"    //建议使用1.0以上的版本
    },

    安装成功后 在项目根目录vendor下会有一个tymon的文件夹

  如果你的laravel版本在5.4及以下版本需要多设置如下几步

  1: 在config/app.php配置文件注册服务提供者

TymonJWTAuthProvidersJWTAuthServiceProvider::class

  2:再注册需要用到的对应门面

'JWTAuth' => TymonJWTAuthFacadesJWTAuth::class
'JWTFactory' => TymonJWTAuthFacadesJWTFactory::class

  

第二步    使用这个命令  在config目录下生成一个jwt.php的配置文件

    php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"

第三步   使用这个命令  会在 .env文件中生成一个加密的密钥   例如: JWT_SECRET=rDYnuDQ69IFUjr1hKDiZ2W4ZOFfklyScpdh1qMadpzZX7u************

    php artisan jwt:secret

第四步  修改config/auth.php文件  

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],

        //后台
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],

        //前端模块
        'home' => [ 
            'driver' => 'jwt',   //这里记得要修改   默认是session
            'provider' => 'homeuser',   //这里在下面对应的配置
        ],
],

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppUser::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => HiCommonModelAuthAdmins::class,
        ],
     //前端的配置
        'homeuser' => [
            'driver' => 'eloquent',
            'model' => HiCommonModelUser::class,   //这里是用户表对应的模型
        ]
],

  

第五步  创建用户表模型

<?php
namespace HiCommonModel;   //这里命名空间需要换成你的命名空间
use IlluminateNotificationsNotifiable;
use TymonJWTAuthContractsJWTSubject;
use IlluminateFoundationAuthUser as Authenticatable;
class HomeUser extends Authenticatable implements JWTSubject
{
    use Notifiable;
    protected $table = 'users';
    protected $guarded = [];
    /**
     * 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 [];
    }
}

  

第六步  定义路由(这里就不贴了 能访问到就行)  请求服务

     /**
         *  用户登录生成token
         *  $arr_input  array
         *  $arr_input['unsername']   string  账户
         *  $arr_input['password']   string   密码
         *  return string   生成的token
         **/
        public function user_login( array $arr_input ){
            //这里需要对$arr_input进行数据验证
            $token = home_guard()->attempt( $arr_input );
            //token最终生成的格式   xxxxx.yyyyy.zzzzz(头部.载荷.签名)   错误的话会返回一个false
            $arr_token = [
                'access_token' => $token,
                'token_type' => 'bearer',
                'expires_in' => home_guard()->factory()->getTTL() * 60
            ];
            return $arr_token;
        }
        //这个我是放在公共的function中的  所以直接调用
        function home_guard(){
            return IlluminateSupportFacadesAuth::guard('home');
        }

  

第七步   请求成功后得到token值后 , 可以使用这个token值或者当前登录用户的详细信息,这样就不用明文的传递用户的uid  服务端不会直接获取前端传递的uid了 可以直接使用token值 服务能直接

              获取到用户信息 ,  你可以把token信息放在header 里 (建议这样做)

     获取用户的详细信息    

 public function user_info(){
     return  home_guard()->user();
 }

  

这里jwt的基本使用就结束了,  记录的都是使用流程, 没有高大上的东西,相信初始者能看懂

这里附上大佬的文章https://blog.csdn.net/qq_24935119/article/details/90670878

原文地址:https://www.cnblogs.com/hinq/p/12155570.html