日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

laravel JWTAuth對api接口權限進行鑒權

作者:渡目成書 更新時間: 2022-01-27 編程語言
  • 一般對外提供api接口服務都需要對使用的身份進行鑒權,需要對權限方面進行控制
  • 這里我們使用JWTAuth來進行完成

配置JWTAuth

  • 這里使用的laravel為5.4版本,根據下面的JWTAuth拓展包使用范圍我們使用0.5版本

    安裝拓展包

composer require tymon/jwt-auth 0.5.*

打開confi/app.php進行配置

providers中配置

\Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,

aliases配置

‘JWTAuth’=> Tymon\JWTAuth\Facades\JWTAuth::class,
‘JWTFactory’=> Tymon\JWTAuth\Facades\JWTFactory::class,

生成配置文件config/jwt.php,文件中可以進行配置

php artisan vendor:publish --provider=“Tymon\JWTAuth\Providers\JWTAuthServiceProvider”

生成隨機密匙

php artisan jwt:generate

Laravel version jwt-auth version
4.* 0.3.* 0.4.*
5.*&& <5.5 0.5.*
5.* 1.0.*

默認使用

  • api路由文件中寫上生成密匙路由,模擬用戶登錄使用接口,使用的用戶表為默認的user

Route::post(‘apiauth’,‘ApiController@auth’);
Route::get(‘getauth’,‘ApiController@getAuth’);

文件ApiController.php

<?php

namespace App\Http\Controllers\Admin\api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Facades\JWTAuth;

class ApiController extends Controller
{
    public function auth(Request $request)
    {
        $cds = $request->only('name', 'password');

        try {
            if (!$token = JWTAuth::attempt($cds)) {
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } catch (JWTException $e) {
            return response()->json(['error' => 'could_not_create_token'], 500);
        }

        return response()->json(compact('token'));
    }

     public function getAuth(Request $request)
    {
        try {
            if (!$user = JWTAuth::parseToken()->authenticate()) {
                return response()->json(['user_not_found'], 404);
            }

        } catch (TokenExpiredException $e) {
            return response()->json(['token_expired'], $e->getStatusCode());
        }catch (TokenInvalidException $e){
            return response()->json(['token_invalid'], $e->getStatusCode());
        }catch (JWTException $e){
            return response()->json(['token_absent'], $e->getStatusCode());
        }
        return response()->json(compact('user'));
    }
}

我們先訪問登錄接口獲取token,使用user表里面的用戶
在這里插入圖片描述
我們使用另外的要驗證登錄用戶的接口來檢測

訪問方式需要在headers里進行配置,如下

key:Authorization vaule:Bearer+空格+token
在這里插入圖片描述

這里我們通過登錄路接口的的token獲取到了用戶的信息,我們可以根據這個信息獲取到用戶的權限等信息,封裝成一個權限控制的中間件來對用戶權限進行控制

api用戶表情況

  • 很多情況接口的用戶并不是默認的user用戶表,是我們自己新建的用戶表,JWTAuth默認的是對默認的user表進行信息鑒權,我們需要對配置信息進行修改

在config/auth.php用戶登錄的配置都為user表,我們不能直接修改這張表的配置,修改后會影響正常的web端。我們需要動態的修改這些數據,對需要的路由進行數據修改,我們可以使用中間件去完成

  • 新建中間件,并寫上加入到相對應的路由上,我們就能使用api對應的用戶表進行數據校驗
public function handle($request, Closure $next)
    {
        config(['jwt.user' => 'App\Models\hwtc\Apiuser']);  //重要用于指定特定model
        config(['auth.providers.users.model' => \App\Models\hwtc\Apiuser::class]);  //重要用于指定特定model

        return $next($request);
    }

原文鏈接:https://blog.csdn.net/weixin_43674113/article/details/114653230

欄目分類
最近更新