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总结
- 生命周期