优化用户查找逻辑,新增根据微信 UnionId 查找用户的方法,简化数据库查询
This commit is contained in:
@@ -29,7 +29,7 @@ app
|
||||
path: 'config',
|
||||
key: 'update',
|
||||
middleware: ['auth'],
|
||||
description: '创建或更新用户配置,参数在data中传入',
|
||||
description: '创建或更新用户配置,参数在data中传入'
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const tokernUser = ctx.state.tokenUser;
|
||||
@@ -90,16 +90,21 @@ app
|
||||
config = updated[0];
|
||||
ctx.body = config;
|
||||
} else {
|
||||
// 根据key创建一个配置
|
||||
const inserted = await db.insert(schema.kvConfig).values({
|
||||
id: nanoid(),
|
||||
key,
|
||||
...rest,
|
||||
data: data,
|
||||
uid: tuid,
|
||||
}).returning();
|
||||
config = inserted[0];
|
||||
ctx.body = config;
|
||||
try {
|
||||
|
||||
// 根据key创建一个配置
|
||||
const inserted = await db.insert(schema.kvConfig).values({
|
||||
key,
|
||||
...rest,
|
||||
data: data || {},
|
||||
uid: tuid,
|
||||
}).returning();
|
||||
config = inserted[0];
|
||||
ctx.body = config;
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
const key = config?.key;
|
||||
|
||||
@@ -101,9 +101,7 @@ app
|
||||
.define(async (ctx) => {
|
||||
const tokenUser = ctx.state?.tokenUser || {};
|
||||
const { id } = tokenUser;
|
||||
const user = await User.findByPk(id, {
|
||||
logging: false,
|
||||
});
|
||||
const user = await User.findByPk(id);
|
||||
if (!user) {
|
||||
ctx.throw(500, 'user not found');
|
||||
}
|
||||
@@ -126,10 +124,10 @@ app
|
||||
}
|
||||
let user: User | null = null;
|
||||
if (username) {
|
||||
user = await User.findOne({ where: { username }, logging: false });
|
||||
user = await User.findOne({ username });
|
||||
}
|
||||
if (!user && email) {
|
||||
user = await User.findOne({ where: { email } });
|
||||
user = await User.findOne({ email });
|
||||
}
|
||||
if (!user) {
|
||||
ctx.throw(500, 'Login Failed');
|
||||
@@ -242,7 +240,7 @@ app
|
||||
if (email) {
|
||||
user.email = email;
|
||||
}
|
||||
await user.save({ fields: ['username', 'nickname', 'data', 'password', 'description', 'avatar', 'email'] });
|
||||
await user.save();
|
||||
ctx.body = await user.getInfo();
|
||||
})
|
||||
.addTo(app);
|
||||
@@ -336,7 +334,7 @@ app
|
||||
await User.oauth.delToken(token);
|
||||
ctx.body = result;
|
||||
} else {
|
||||
const user = await User.findOne({ where: { username } });
|
||||
const user = await User.findOne({ username });
|
||||
const result = await user.createToken(userId, 'default');
|
||||
createCookie({
|
||||
token: result.accessToken,
|
||||
|
||||
@@ -22,9 +22,7 @@ export class WxServices {
|
||||
}
|
||||
async checkUserExist(username: string) {
|
||||
const user = await User.findOne({
|
||||
where: {
|
||||
username,
|
||||
},
|
||||
username,
|
||||
});
|
||||
return !!user;
|
||||
}
|
||||
@@ -60,21 +58,16 @@ export class WxServices {
|
||||
}
|
||||
this.wxToken = token;
|
||||
const unionid = token.unionid;
|
||||
let user = await User.findOne({
|
||||
where: {
|
||||
data: {
|
||||
wxUnionId: unionid,
|
||||
},
|
||||
},
|
||||
});
|
||||
let user = await User.findByUnionId(unionid);
|
||||
// @ts-ignore
|
||||
if (type === 'mp' && user && user.data.wxmpOpenid !== token.openid) {
|
||||
user.data = {
|
||||
const updatedData = {
|
||||
...user.data,
|
||||
// @ts-ignore
|
||||
wxmpOpenid: token.openid,
|
||||
};
|
||||
user = await user.update({ data: user.data });
|
||||
await user.update({ data: updatedData });
|
||||
user = await User.findByPk(user.id);
|
||||
}
|
||||
if (!user) {
|
||||
const username = await this.randomUsername();
|
||||
@@ -92,7 +85,7 @@ export class WxServices {
|
||||
// @ts-ignore
|
||||
data.wxOpenid = token.openid;
|
||||
}
|
||||
this.user = await user.save({ fields: ['data'] });
|
||||
this.user = await user.save();
|
||||
|
||||
await this.getUserInfo();
|
||||
this.isNew = true;
|
||||
@@ -134,13 +127,7 @@ export class WxServices {
|
||||
};
|
||||
const userInfo = await getUserInfoByMp(access_token, openid);
|
||||
const { unionid } = userInfo;
|
||||
let user = await User.findOne({
|
||||
where: {
|
||||
data: {
|
||||
wxUnionId: unionid,
|
||||
},
|
||||
},
|
||||
});
|
||||
let user = await User.findByUnionId(unionid);
|
||||
if (!user) {
|
||||
const username = await this.randomUsername();
|
||||
user = await User.createUser(username, nanoid(10));
|
||||
@@ -164,7 +151,7 @@ export class WxServices {
|
||||
fileds.push('avatar');
|
||||
}
|
||||
this.isNew = true;
|
||||
this.user = await user.save({ fields: fileds });
|
||||
this.user = await user.save();
|
||||
}
|
||||
this.user = user;
|
||||
const tokenInfo = await user.createToken(null, 'plugin', {
|
||||
|
||||
@@ -3,11 +3,15 @@ import { useConfig } from '@kevisual/use-config';
|
||||
|
||||
export const config = useConfig()
|
||||
const wxOpen = {
|
||||
// @ts-ignore
|
||||
appId: config.WX_OPEN_APP_ID,
|
||||
// @ts-ignore
|
||||
appSecret: config.WX_OPEN_APP_SECRET,
|
||||
}
|
||||
const wx = {
|
||||
// @ts-ignore
|
||||
appId: config.WX_MP_APP_ID,
|
||||
// @ts-ignore
|
||||
appSecret: config.WX_MP_APP_SECRET,
|
||||
}
|
||||
export type WxTokenResponse = {
|
||||
@@ -139,7 +143,8 @@ type RefreshToken = {
|
||||
scope: string;
|
||||
};
|
||||
export const refreshToken = async (refreshToken: string): Promise<RefreshToken> => {
|
||||
const { appId } = config.wx;
|
||||
// @ts-ignore
|
||||
const { appId } = config?.wx;
|
||||
const refreshUrl = `https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=${appId}&grant_type=refresh_token&refresh_token=${refreshToken}`;
|
||||
const res = await fetch(refreshUrl);
|
||||
const data = await res.json();
|
||||
|
||||
Reference in New Issue
Block a user