jwt配置
配置在 app/config/superadminx.php的jwt 中,支持多应用配置,token支持存到mysql或redis中,支持同一用户多端登录
如何使用
php
<?php
//引入jwt
use app\utils\Jwt;
//加密生成token
$token = Jwt::generateToken('admin_pc', $adminUser);
//解密获取用户
$adminUser = Jwt::getUser('admin_pc');
app/middleware/JwtAdmin.php 后端权限验证中间件
主要做两件事,判断用户是否登录,判断是否对某个接口具有权限
1.判断是否登录
写后台控制器的时候(写api的控制器的时候也是如此),增加两个属性:$onLogin,$noNeedLogin,在中间件里面会通过反射来获取当前请求控制器中这两个属性的值,来判断当前请求的方法是否需要登录,则进行鉴权是否已登录,鉴权成功后当前登录的用户会放到 $request->adminUser 中,在后续程序中可以直接使用
查看代码
php
<?php
namespace app\admin\controller;
use support\Request;
use support\Response;
use app\common\logic\AdminUserLogic;
/**
* 管理用户
*
* @author zy <741599086@qq.com>
* @link https://www.superadminx.com/
* */
class AdminUser
{
//此控制器是否需要登录
protected $onLogin = true;
//不需要登录的方法
protected $noNeedLogin = ['Logout'];
}
2.接口级别的鉴权
比如当前请求的是AdminUser控制器的getList方法,访问接口就是/admin/AdminUser/getList,在后端增加菜单或权限节点的时候,如新增一个权限节点的名称为adminUserGetList,那么后端此方法的注释中增加 @auth adminUserGetList ,那么中间件在鉴权的时候会判断当前请求方法的注释中是否有@auth 属性,则代表是否需要进行接口的权限验证,则会判断用户所在角色中是否拥有adminUserGetList的权限
查看代码
php
<?php
namespace app\admin\controller;
use support\Request;
use support\Response;
use app\common\logic\AdminUserLogic;
/**
* 管理用户
*
* @author zy <741599086@qq.com>
* @link https://www.superadminx.com/
* */
class AdminUser
{
//此控制器是否需要登录
protected $onLogin = true;
//不需要登录的方法
protected $noNeedLogin = ['Logout'];
/**
* 获取列表
* @method get
* @auth adminUserGetList
* @param Request $request
* @return Response
*/
public function getList(Request $request): Response
{
$list = AdminUserLogic::getList($request->get());
return success($list);
}
}