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="Tymon\JWTAuth\Providers\LaravelServiceProvider"
  3. 如果使用jwt-auth作为用户认证,默认的模型文件为 config/auth.php 中设置的 model。(默认的user模型文件为app/user.php, 网上教程习惯为 app/model/user.php)
    复制代码
        'providers' => [
            'users' => [
                'driver' => 'eloquent',
                'model' => App\Model\User::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' => App\Model\User::class,
            ],
    
            // 'users' => [
            //     'driver' => 'database',
            //     'table' => 'users',
            // ],
            // admin 模块对应数据表
            'admins' => [
                'driver' => 'eloquent',
                'model' => App\Model\Admin::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登陆

 

posted @   夏秋初  阅读(1666)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示