在 RuoYi-Vue
项目中,magic-api
的集成让接口开发变得更加轻松和高效。通常情况下,我们在开发过程中需要获取用户的登录信息,如使用 SecurityUtils
或 TokenService
来解析用户的身份。然而,直接在 magic-api
中使用这些工具来获取用户信息时,可能会遇到无法正常执行的问题。本文将介绍这个问题的成因,并提供具体的解决方案。
当 RuoYi-Vue 项目集成了 magic-api
后,开发者尝试通过 magic-api
调用 RuoYi 框架的 SecurityUtils
或 TokenService
来获取用户登录信息时,通常会出现错误,导致无法正常获取用户数据。这使得用户信息的管理和使用变得不便。
RuoYi 项目中,SecurityUtils
和 TokenService
主要依赖于 HttpRequest
流来提取请求头(header
)中的 Authorization
信息,进而解析并获取用户的登录信息。然而,在 magic-api
中,使用 import
语法引入 SecurityUtils
或 TokenService
时,HTTP
流并没有传递到 magic-api
的运行环境中。这种情况下,无法正常提取 Authorization
令牌,导致调用时返回 401 错误,即未授权访问。
为了解决这个问题,可以通过调整 TokenService
类来提供一种在 magic-api
环境下解析 Authorization
的方式。具体做法是,在 TokenService
中新增一个公共方法,允许直接传递 Authorization
信息,并解析令牌以获取用户数据。
TokenService
中新增公共方法 getLoginUser
位置:ruoyi/framework/web/service/TokenService.java
在该类中新增一个方法,该方法将允许我们直接传递Authorization
令牌,并获取用户信息。
/**
* 加这个方法即可
*
* @return 用户信息
*/
public LoginUser getLoginUser(String authorization) {
// 获取请求携带的令牌
String token = getToken(authorization);
return getLoginUserFromRedis(token);
}
private LoginUser getLoginUserFromRedis(String token) {
if (StringUtils.isNotEmpty(token)) {
try {
Claims claims = parseToken(token);
// 解析对应的权限以及用户信息
String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
String userKey = getTokenKey(uuid);
LoginUser user = redisCache.getCacheObject(userKey);
return user;
} catch (Exception e) {}
}
return null;
}
该方法通过传入 Authorization
令牌,调用内部的 getLoginUserFromRedis
方法来从 Redis 缓存中获取对应的用户信息。这样做可以绕过 HTTP
流的限制,直接从传入的 Authorization
信息中获取用户登录状态。
magic-api
中调用 getLoginUser
方法当我们通过 magic-api
开发接口时,可以利用刚刚新增的 getLoginUser
方法来获取用户信息。
import "tokenService" as tokenService;
// 从请求头中获取 Authorization 信息
var token = header.Authorization;
// 调用 TokenService 获取登录用户信息
var userInfo = tokenService.getLoginUser(token);
// 返回用户信息
return userInfo;
这里,我们首先通过 header.Authorization
获取传递的 Authorization
信息,然后调用 tokenService.getLoginUser(token)
方法来解析该令牌,并返回用户信息。这样做可以确保我们在 magic-api
的环境下也能够获取登录用户的信息。
当你正确执行上面的步骤后,便可以在 magic-api
的接口中成功调用用户信息。执行效果如下图所示:
在实际开发过程中,如果你发现使用 magic-api
调试用户信息时无法成功获取 Authorization
令牌,可能是因为没有在全局请求头中添加对应的 Authorization
信息。
F12
打开浏览器调试工具,在请求中获取 Authorization
的具体值。magic-api
中添加全局请求头: 将获取到的 Authorization
信息添加到 magic-api
的全局请求头中。具体操作如下:magic-api
中的每个请求都将带有 Authorization
头,确保我们能够正确解析用户身份。通过上述方法,我们成功地在 RuoYi-Vue 中解决了 magic-api
无法直接获取用户登录信息的问题。核心思路是在 TokenService
中新增一个可以直接解析 Authorization
的方法,绕过 HTTP
流的限制。这种方法确保了在 magic-api
环境中,我们也能够灵活、安全地获取用户信息并加以应用。
✅ 希望这篇文章能帮助你解决在开发中的类似问题!
powered by kaifamiao