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登陆
原文地址:https://www.cnblogs.com/xiaqiuchu/p/13462468.html