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

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

laravel JWTAuth對api接口權(quán)限進(jìn)行鑒權(quán)

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

配置JWTAuth

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

    安裝拓展包

composer require tymon/jwt-auth 0.5.*

打開confi/app.php進(jìn)行配置

providers中配置

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

aliases配置

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

生成配置文件config/jwt.php,文件中可以進(jìn)行配置

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

生成隨機(jī)密匙

php artisan jwt:generate

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

默認(rèn)使用

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

Route::post(‘a(chǎn)piauth’,‘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里進(jìn)行配置,如下

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

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

api用戶表情況

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

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

  • 新建中間件,并寫上加入到相對應(yīng)的路由上,我們就能使用api對應(yīng)的用戶表進(jìn)行數(shù)據(jù)校驗
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

欄目分類
最近更新