• Laravel7 配置jwt ,并处理 Unauthorized 错误


    官网文档:https://jwt-auth.readthedocs.io/en/docs/

    教程 : https://blog.csdn.net/ben_cxy/article/details/106658851

    备注:

    1. 对于 Laravel 版本 低于 5.5 的应用,您还要在 config/app.php 文件中设置服务提供者和别名。如果您的 Laravel 版本为 5.5 或以上,Laravel 会进行「包自动发现」,不需要手动添加设置。
    2. 对于 5.5 或以上版本 的 Laravel,请使用下面这条命令来发布配置文件: php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
    3. 如果使用jwt-auth作为用户认证,默认的模型文件为 config/auth.php 中设置的 model。(默认的user模型文件为app/user.php, 网上教程习惯为 app/model/user.php)
          'providers' => [
              'users' => [
                  'driver' => 'eloquent',
                  'model' => AppModelUser::class,
              ],
      
              // 'users' => [
              //     'driver' => 'database',
              //     'table' => 'users',
              // ],
          ],
      则需要修改User模型。
    4. 测试请求时 api/auth/login?email=123@qq.com&password=123,在数据库内储存的 password 字段需要进行加密储存,加密方式 password_hash(123, PASSWORD_DEFAULT)

    多表登陆问题:

    1. 参考: https://learnku.com/articles/28881 https://learnku.com/articles/30342#reply102021
    2. 配置文件设置为
      'guards' => [
              'web' => [
                  'driver' => 'session',
                  'provider' => 'users',
              ],
              //  默认
              'api' => [
                  // 'driver' => 'token',
                  // 'provider' => 'users',
                  'hash' => false,
                  'driver' => 'jwt',
                  'provider' => 'users',
              ],
              // 新增admins 模块
                  'admin' => [
                  'driver' => 'jwt',
                  'provider' => 'admins',
              ]
          ],
      
          'providers' => [
              // user 模块对应数据表
              'users' => [
                  'driver' => 'eloquent',
                  'model' => AppModelUser::class,
              ],
      
              // 'users' => [
              //     'driver' => 'database',
              //     'table' => 'users',
              // ],
              // admin 模块对应数据表
              'admins' => [
                  'driver' => 'eloquent',
                  'model' => AppModelAdmin::class,
              ]
          ],
    3. 对应模型设置增加对应识别字段
      // admin
      public function getJWTCustomClaims()
          {
              // 区分管理与用户的jwt,防止越权
              return ['role' => 'admin'];
          }
      // user 
      public function getJWTCustomClaims()
          {
              // 区分管理与用户的jwt,防止越权
              return ['role' => 'user'];
      
          }
    4. 调用时 admin/user调用
      // api 对应 user 模型 , admin 对应 admin模型
      // auth(config/auth.php中providers对应的键名)
      auth('api')
      auth('admin')

    参考:

    1. https://blog.csdn.net/ttaohua/article/details/100175144
    2. https://blog.csdn.net/ben_cxy/article/details/106658851
    3. https://blog.csdn.net/amazingdyd/article/details/84849915
    4. https://learnku.com/laravel/t/27760
    5. https://blog.csdn.net/amazing_jin/article/details/81170964
    6. https://learnku.com/laravel/t/46984
    7. https://jwt-auth.readthedocs.io/en/docs/resources/
    8. https://github.com/tymondesigns/jwt-auth/issues/1094
    9. https://stackoverflow.com/questions/53404230/laravel-jwt-returns-error-unauthorized-on-login
    10. https://learnku.com/articles/30342 实现多表 jwt登陆
  • 相关阅读:
    window.onresize绑定事件以及解绑事件
    jqGrid中select带可编辑的
    ROS(机器视觉)
    Python(time模块)
    Python(random模块)
    Python迭代器
    Python生成器
    Python装饰器(函数)
    ROS(URDF机器人建模)
    ROS基础
  • 原文地址:https://www.cnblogs.com/xiaqiuchu/p/13462468.html
Copyright © 2020-2023  润新知