1、安裝 jwt-auth。
```
composer require tymon/jwt-auth 1.*@rc
```
2.在config/app.php中注冊服務提供者。
```
'providers' => [
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
```
3.生成配置文件。
```
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
```
此命令會在config目錄下生成一個jwt.php配置文件
4.生成密鑰。
```
php artisan jwt:secret
```
5.在config/auth.php文件中,添加guard和Providers,代碼如下。
```
'auth_admin' => [
'driver' => 'jwt',
'provider' => 'auth_admins'
],
'auth_admins' => [
'driver' => 'eloquent',
'model' => Modules\AuthAdmin\Models\AuthAdmin::class,
],
```
6.構建模型層。
```
<?php
namespace Modules\AuthAdmin\Models;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Modules\AuthAdmin\Services\AuthAdminService;
use Modules\AuthAdmin\Models\BaseApiModel;
class AuthAdmin extends Authenticatable implements JWTSubject
{
use Notifiable;
protected $guard = 'auth_admin';
protected $hidden = [
'password'
];
/**
* @name jwt標識
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* @name jwt自定義聲明
*/
public function getJWTCustomClaims()
{
return [];
}
/**
* @name 用戶登錄
*/
public function login($data){
$BaseApiModel = new BaseApiModel();
if (true == \Auth::guard('auth_admin')->attempt($data)) {
$user_info = $this->where(['username'=>$data['username']])->select('id','username')->first();
if($user_info){
$user_info = $user_info->toArray();
$user_info['password'] = $data['password'];
$token = (new AuthAdminService())->set_token($user_info);
if(count($token)){
return $BaseApiModel->api_success([
'msg'=>'登錄成功!',
'data'=>$token
]);
}
return $BaseApiModel->api_error(['msg'=>'登錄失敗!']);
}
}
return $BaseApiModel->api_error(['msg'=>'賬號或密碼錯誤!']);
}
}
```
7.創建權限驗證中間件。
```
<?php
namespace Modules\AuthAdmin\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;
use JWTAuth;
use Modules\AuthAdmin\Models\Admin as AdminModel;
class AdminApiAuth
{
/**
* Handle an incoming request.
* php artisan module:make-middleware AdminAuth Admin
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$route_data = $request->route();
$url = str_replace($route_data->getAction()['prefix'] . '/',"",$route_data->uri);
$url_arr = ['auth/login/login'];
$response = $next($request);
$api_key = $request->header('apikey');
if($api_key != config('authadmin.api_key')){
return response()->json([
'code' => 1101,
'msg'=>'apikey錯誤!'
],401);
}
if(in_array($url,$url_arr)){
return $response;
}
try {
if (! $user = JWTAuth::parseToken()->authenticate()) { //獲取到用戶數據,并賦值給$user
return response()->json([
'code' => 1004,
//'msg' => '用戶不存在'
'msg'=>'請先登錄!'
],400);
}
return $response;
} catch (TokenExpiredException $e) {
return response()->json([
'code' => 1003,
'msg' => 'token 過期' , //token已過期
],400);
} catch (TokenInvalidException $e) {
if(in_array($url,['auth/auth/refresh',])){
return $response;
}else{
return response()->json([
'code' => 1002,
//'msg' => 'token 無效', //token無效
'msg'=>'請先登錄!'
],400);
}
} catch (JWTException $e) {
return response()->json([
'code' => 1001,
//'msg' => '缺少token' , //token為空
'msg'=>'請先登錄!'
],400);
}
}
}
```
8.創建jwt的Services服務。
```
<?php
namespace Modules\AuthAdmin\Services;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthAdminService
{
public function __construct()
{
\Config::set('auth.defaults.guard', 'auth_admin');
}
/**
* @name 設置token
*/
public function set_token($data){
if (! $token = JWTAuth::attempt($data)){
return [];
}
return $this->respond_with_token($token);
}
/**
* @name 我的信息
*/
public function my(){
return JWTAuth::parseToken()->touser();
}
/**
* @name 退出登錄
*/
public function logout()
{
return JWTAuth::parseToken()->invalidate();
}
/**
* @name 刷新
*/
public function refresh()
{
return $this->respond_with_token(JWTAuth::parseToken()->refresh());
}
/**
* @name 組合token數據
*/
protected function respond_with_token($token)
{
return [
'token' => $token,
'token_type' => 'bearer',
'expires_in' => JWTAuth::factory()->getTTL() * 60
];
}
}
```
視頻鏈接
```[youku]
XNDU0NzI3ODYyOA
```
- 空白目錄
- 前言
- 狀態碼
- 后臺頁面
- nodejs安裝
- vue-cli腳手架安裝
- 使用vue ui創建項目
- 將本地代碼托管到碼云
- 繪制后臺登錄頁面
- 安裝less依賴
- uniapp熱更新
- e2e自動化測試
- mock
- ant design pro 導出excel
- 后臺接口
- laravel項目安裝
- 創建數據庫
- 創建數據填充
- 中間件
- 表單驗證
- jwt-auth安裝
- 處理跨域請求
- 安裝swagger
- 接口
- 站點管理
- 后臺登錄
- 站點管理-首頁
- 站點管理-刷新token
- 站點管理-退出登錄
- 站點管理-獲取左側欄
- 首頁-修改密碼
- 單圖上傳
- 清除緩存
- 站點管理-權限管理
- 權限管理-權限組列表
- 權限組列表
- 權限組添加
- 權限組編輯頁面
- 權限組編輯提交
- 權限組調整狀態
- 權限組分配權限
- 權限組分配權限提交
- 權限管理-權限列表
- 權限列表
- 權限菜單狀態
- 權限是否驗證
- 權限排序
- 權限添加
- 權限編輯頁面
- 權限編輯提交
- 權限添加子級
- 權限刪除
- 權限管理-管理員列表
- 管理員列表
- 管理員列表-添加
- 管理員編輯頁面
- 管理員編輯提交
- 管理員獲取權限組
- 管理員調整狀態
- 管理員初始化密碼
- 站點管理-系統配置
- 系統配置-系統配置
- 系統配置
- 系統配置-提交
- 商城管理
- 商品管理
- 商品分類
- -商品分類
- 商品分類-狀態
- 商品分類-排序
- 商品分類-添加
- 商品分類-添加子級
- 商品分類-編輯頁面
- 商品分類-編輯提交
- 商品屬性
- -商品屬性
- 商品屬性-商品分類
- 商品屬性-添加
- 商品屬性-編輯頁面
- 商品屬性-編輯提交
- 商品屬性-狀態
- 商品屬性-排序
- 商品屬性-刪除
- 商品屬性值
- -商品屬性值
- 商品屬性值-商品屬性
- 商品屬性值-添加
- 商品屬性值-編輯頁面
- 商品屬性值-編輯提交
- 商品屬性值-狀態
- 商品屬性值-排序
- 商品屬性值-刪除
- 商品列表
- --商品分類
- --獲取屬性
- 商品-刪除
- 商品-排序
- 商品-狀態
- 商品-是否精品推薦
- 商品-是否熱賣單品
- -商品列表
- 商品-添加
- 商品編輯頁面
- 商品-編輯提交
- 會員管理
- 用戶列表
- -用戶列表
- 圖片管理
- 輪播圖列表
- -輪播圖列表
- 輪播圖添加
- 輪播圖編輯頁面
- 輪播圖編輯提交
- 輪播圖狀態
- 輪播圖排序
- 輪播圖刪除
- wap接口
- 我的
- 小程序登錄
- 獲取用戶信息
- 刷新token
- 獲取設置信息
- 綁定手機號
- 退出登錄
- 地址管理
- 獲取省市區
- 添加地址
- 我的地址列表
- 獲取編輯地址數據
- 編輯地址
- 刪除收貨地址
- 商品足跡
- 收藏商品
- 首頁
- 輪播圖
- --商品列表
- 商品收藏
- 分類
- 商品一級分類
- 商品二級分類
- 購物車
- 加入購物車
- 購物車數量
- 購物車列表
- 單選
- 全選全不選
- 購物車減或加
- 購物車刪除
- Vue3總結
- 生命周期