網(wǎng)站首頁 編程語言 正文
- 一般對外提供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
相關(guān)推薦
- 2022-11-13 Git如何恢復(fù)到之前版本_相關(guān)技巧
- 2022-12-12 flutter中如何使用和擴(kuò)展ThemeData實現(xiàn)詳解_Dart
- 2022-06-19 docker容器非root用戶提權(quán)的問題解決_docker
- 2022-05-29 C語言?超詳細(xì)模擬實現(xiàn)單鏈表的基本操作建議收藏_C 語言
- 2022-07-16 如何編譯omx-bellagio以及ffmpeg插件
- 2023-11-16 python list列表拼接
- 2022-07-30 Linux secure 日志分析
- 2022-06-18 Android?ProgressBar實現(xiàn)進(jìn)度條效果_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支