• 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

  • 相关阅读:
    Restart
    Tired
    Money,Right or Nation?
    End
    Cooperation
    【kooboo】代码块
    [kooboo]创建站点过程
    [kooboo] 使用 SQL Server 进行持久化 方法
    两种实现模式,还是选择2,少一层继承。
    读取进程内所有用户Session
  • 原文地址:https://www.cnblogs.com/hinq/p/12155570.html
Copyright © 2020-2023  润新知