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登陸

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM