|
|
@@ -15,6 +15,10 @@ const CreateImTokenRequest = z.object({
|
|
|
role: z.string().openapi({
|
|
|
description: '用户角色',
|
|
|
example: 'teacher'
|
|
|
+ }),
|
|
|
+ userId: z.string().optional().openapi({
|
|
|
+ description: '用户ID(可选,用于指定其他用户)',
|
|
|
+ example: '12345'
|
|
|
})
|
|
|
});
|
|
|
|
|
|
@@ -149,14 +153,21 @@ const createRtcTokenRoute = createRoute({
|
|
|
const app = new OpenAPIHono<AuthContext>()
|
|
|
.openapi(createImTokenRoute, async (c) => {
|
|
|
try {
|
|
|
- const { role } = c.req.valid('json');
|
|
|
+ const { role, userId } = c.req.valid('json');
|
|
|
const user = c.get('user');
|
|
|
|
|
|
- if (!user || typeof user !== 'object' || !('id' in user)) {
|
|
|
- return c.json({ code: 401, message: '用户信息无效' }, 401);
|
|
|
+ // 如果指定了userId,使用指定的userId;否则使用当前登录用户的id
|
|
|
+ let targetUserId: string;
|
|
|
+ if (userId) {
|
|
|
+ targetUserId = userId;
|
|
|
+ } else {
|
|
|
+ if (!user || typeof user !== 'object' || !('id' in user)) {
|
|
|
+ return c.json({ code: 401, message: '用户信息无效' }, 401);
|
|
|
+ }
|
|
|
+ targetUserId = user.id.toString();
|
|
|
}
|
|
|
|
|
|
- const { nonce, token, timestamp } = await generateImToken(user.id.toString(), role);
|
|
|
+ const { nonce, token, timestamp } = await generateImToken(targetUserId, role);
|
|
|
|
|
|
return c.json({
|
|
|
nonce,
|