增加userInfo接口

This commit is contained in:
lik
2026-06-01 22:10:31 +08:00
parent ca147ac2a8
commit f3cd769d7d
2 changed files with 42 additions and 4 deletions

View File

@@ -42,7 +42,7 @@ class HandlerUser {
// 从上图获取手机号 // 从上图获取手机号
const phoneNumber = phoneData.phone_info?.phoneNumber; const phoneNumber = phoneData.phone_info?.phoneNumber;
return ResponseUtil.success(ctx, {phoneNumber}, "获取手机号成功"); return ResponseUtil.success(ctx, { phoneNumber }, "获取手机号成功");
} catch (err) { } catch (err) {
return ResponseUtil.internalError(ctx, err.message); return ResponseUtil.internalError(ctx, err.message);
} }
@@ -73,7 +73,7 @@ class HandlerUser {
if (!openid) { if (!openid) {
return ResponseUtil.error(ctx, "微信登录失败,未获取到 openid", null, 400); return ResponseUtil.error(ctx, "微信登录失败,未获取到 openid", null, 400);
} }
// 使用openid和phoneNumber查询用户 // 使用openid和phoneNumber查询用户
let key = `app.${appId}.wxopenid`; let key = `app.${appId}.wxopenid`;
let user = await DBModel.User.findOne({ [key]: openid }); let user = await DBModel.User.findOne({ [key]: openid });
@@ -94,7 +94,7 @@ class HandlerUser {
user = await DBModel.User.setUser(newUser); user = await DBModel.User.setUser(newUser);
} }
} }
// //
if (user) { if (user) {
if (phoneNumber && phoneNumber.length > 0 && user.profile.mobile !== phoneNumber) { if (phoneNumber && phoneNumber.length > 0 && user.profile.mobile !== phoneNumber) {
@@ -117,7 +117,7 @@ class HandlerUser {
const token = await this.genToken(user._id.toString()); const token = await this.genToken(user._id.toString());
user.security.token = token; user.security.token = token;
} }
user.security.tokenExpiry = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); user.security.tokenExpiry = new Date(Date.now() + 15 * 24 * 60 * 60 * 1000);
await user.save(); await user.save();
// 安全起见删除密码相关字段 // 安全起见删除密码相关字段
@@ -199,6 +199,43 @@ class HandlerUser {
return ResponseUtil.success(ctx, null, "退出登录成功"); return ResponseUtil.success(ctx, null, "退出登录成功");
} }
// 获取用户信息
async userInfo(ctx) {
try {
const { token, userId } = ctx.request.body;
if (!token || !userId) {
return ResponseUtil.badRequest(ctx, "缺少 token 或 userId");
}
let user = null;
if (token) {
user = await DBModel.User.findOne({ "security.token": token });
}
else {
user = await DBModel.User.findOne({ "_id": userId });
}
if (!user) {
return ResponseUtil.unauthorized(ctx, "用户未登录或 token 无效");
}
const isTokenValid = user.security.token &&
user.security.tokenExpiry &&
new Date() < user.security.tokenExpiry;
if (!isTokenValid) {
return ResponseUtil.unauthorized(ctx, "登录已过期,请重新登录");
}
// 安全起见删除密码相关字段
delete user.security.passwd;
delete user.security.passwdSalt;
return ResponseUtil.success(ctx, { user }, "获取用户信息成功");
} catch (err) {
return ResponseUtil.internalError(ctx, err.message);
}
}
// 生成 token // 生成 token
async genToken(uid) { async genToken(uid) {
const crypto = await import("crypto"); const crypto = await import("crypto");

View File

@@ -15,6 +15,7 @@ class ApiRouter {
userRouter.post('/wxsignin', this.handler.wxSignin.bind(this.handler)); userRouter.post('/wxsignin', this.handler.wxSignin.bind(this.handler));
userRouter.post('/update', this.handler.updateUser.bind(this.handler)); userRouter.post('/update', this.handler.updateUser.bind(this.handler));
userRouter.post('/signout', this.handler.signout.bind(this.handler)); userRouter.post('/signout', this.handler.signout.bind(this.handler));
userRouter.post('/userInfo', this.handler.userInfo.bind(this.handler));
this.router.use(userRouter.routes()); this.router.use(userRouter.routes());