用户端不要强制用户输入手机号

This commit is contained in:
2026-07-15 19:57:06 +08:00
parent f15d2057f2
commit 0f5f0f4c2b
14 changed files with 167 additions and 71 deletions
@@ -1059,7 +1059,8 @@ export class AuthService {
include: { avatar: true },
});
if (user?.phone && user.phoneVerifiedAt) {
// 微信登录不再强制绑定手机号;phoneVerified=false 也可签发会话,下单页仅提示可选绑定
if (user) {
let activeUser: UserRow =
guestId && guestId !== user.id ? await this.mergeUsers(guestId, user.id) : (user as UserRow);
activeUser = await this.prisma.user.update({
@@ -1087,7 +1088,7 @@ export class AuthService {
if (guestId) {
try {
const guest = await this.assertActiveUser(guestId);
if (guest.phoneVerifiedAt && !guest.wxOpenId) {
if (!guest.wxOpenId) {
const activeUser = await this.attachWechatToUser(guest.id, session, clientApp, platform);
return this.buildSessionResponse(activeUser, clientApp, activeUser.deviceKey);
}
@@ -1096,36 +1097,34 @@ export class AuthService {
}
}
const wxSessionKey = randomUUID();
await this.redis.setJson(
`wx:session:${wxSessionKey}`,
{
openId: session.openId,
unionId: session.unionId,
sessionKey: 'sessionKey' in session ? session.sessionKey : undefined,
accessToken: session.accessToken,
clientApp,
guestId: guestId?.toString(),
} satisfies WxSessionPayload,
1800,
);
if (user && !user.phoneVerifiedAt) {
return {
needBindPhone: true,
wxSessionKey,
actorType: 'USER',
actorId: user.id.toString(),
phoneVerified: false,
user: this.formatUserProfile(user),
};
let created = await this.prisma.user.create({
data: {
userNo: generateUserNo(),
wxOpenId: session.openId,
wxUnionId: session.unionId,
nickname: '微信用户',
cityPreference: {
create: {
selectedCityCode: '410100',
selectedDistrict: '郑州市',
},
},
},
include: { avatar: true },
});
if (session.accessToken) {
const synced = await this.syncWechatUserProfile(created.id, session.accessToken, session.openId);
if (synced) created = synced as UserRow;
}
return {
needBindPhone: true,
wxSessionKey,
phoneVerified: false,
};
this.analyticsService.trackOneSafe(created.id, clientApp, {
eventName: 'wechat_login',
extraJson: { platform },
});
this.analyticsService.trackOneSafe(created.id, clientApp, {
eventName: 'login_success',
extraJson: { method: 'wechat', platform },
});
return this.buildSessionResponse(created, clientApp, created.deviceKey);
}
async bindWechatPhone(
@@ -3,7 +3,6 @@ import type { Request } from 'express';
import { TradeService } from './trade.service';
import { JwtAuthGuard, AuthUser } from '../../common/guards/jwt-auth.guard';
import { PartnerPrimaryGuard } from '../../common/guards/partner-primary.guard';
import { PhoneVerifiedGuard } from '../../common/guards/phone-verified.guard';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import {
PartnerProxyOrderCreateDto,
@@ -22,7 +21,6 @@ export class TradeController {
}
@Post()
@UseGuards(PhoneVerifiedGuard)
create(@CurrentUser() user: AuthUser, @Body() body: Record<string, unknown>, @Req() req: Request) {
return this.tradeService.createOrder(user.actorId, body as never, req);
}
@@ -43,7 +41,6 @@ export class TradeController {
}
@Post(':id/pay')
@UseGuards(PhoneVerifiedGuard)
pay(@CurrentUser() user: AuthUser, @Param('id') id: string) {
return this.tradeService.payOrder(user.actorId, BigInt(id), user.clientApp);
}