This commit is contained in:
maojindao55
2025-03-27 19:24:55 +08:00
parent 04d6a2f9af
commit 413b120c40
8 changed files with 302 additions and 57 deletions

View File

@@ -47,32 +47,27 @@ async function verifyToken(token, env) {
// 中间件函数
export async function onRequest(context) {
try {
//获取环境变量中的AUTH_ACCESS
const authAccess = context.env.AUTH_ACCESS;
console.log('authAccess', authAccess);
//如果AUTH_ACCESS为0则跳过权限校验
if (!authAccess || authAccess === '0') {
if (!authAccess || authAccess === '0' || context.request.url.includes('/login') || context.request.url.includes('/sendcode') || context.request.url.includes('/test-db')) {
console.log('跳过权限校验');
return await context.next();
context.data = { user: null };
return context.next();
}
const request = context.request;
const env = context.env;
//跳过登录页面
if (request.url.includes('/login') || request.url.includes('/sendcode') || request.url.includes('/login') || request.url.includes('/test-db')) {
return await context.next();
}
const authHeader = request.headers.get('Authorization');
const authHeader = context.request.headers.get('Authorization');
if (!authHeader || !authHeader.startsWith('Bearer ')) {
throw new Error('No token provided');
}
const token = authHeader.split(' ')[1];
const payload = await verifyToken(token, env);
const payload = await verifyToken(token, context.env);
// 将用户信息添加到上下文中
context.user = payload;
return await context.next();
// 直接在原有的 request 对象上添加 context
context.data = { user: payload };
console.log('context.request.user', context.data);
return context.next();
} catch (error) {
console.error(error.message, context.request.url);
return new Response(JSON.stringify({ error: error.message }), {

View File

@@ -1,13 +1,13 @@
import {generateAICharacters } from '../../src/config/aiCharacters';
import { groups } from '../../src/config/groups';
export async function onRequestGet({ env, request }) {
console.log('init');
export async function onRequestGet(context) {
try {
return Response.json({
code: 200,
data: {
groups: groups,
characters: generateAICharacters('#groupName#', '#allTags#'),
user: context.data.user || null
}
});
} catch (error) {

View File

@@ -98,7 +98,7 @@ export const onRequestPost: PagesFunction<Env> = async (context) => {
`).bind(phone).first();
// 生成 token
const token = await generateToken(phone, env);
const token = await generateToken(userId, env);
// 删除验证码
await env.bgkv.delete(`sms:${phone}`);
@@ -139,14 +139,14 @@ export const onRequestPost: PagesFunction<Env> = async (context) => {
};
// 修改为 async 函数
async function generateToken(phone: string, env: Env): Promise<string> {
async function generateToken(userId: string, env: Env): Promise<string> {
const header = {
alg: 'HS256',
typ: 'JWT'
};
const payload = {
phone,
userId,
exp: Math.floor(Date.now() / 1000) + (7 * 24 * 60 * 60), // 7天过期
iat: Math.floor(Date.now() / 1000)
};

View File

@@ -0,0 +1,60 @@
interface Env {
bgdb: D1Database;
}
export const onRequestGet: PagesFunction<Env> = async (context) => {
try {
const { env, data } = context;
// 从数据库获取用户信息
const db = env.bgdb;
const userInfo = await db.prepare(`
SELECT id, phone, nickname, avatar_url, status
FROM users
WHERE id = ?
`).bind(data.user.userId).first();
if (!userInfo) {
return new Response(
JSON.stringify({
success: false,
message: '用户不存在'
}),
{
status: 404,
headers: {
'Content-Type': 'application/json',
},
}
);
}
return new Response(
JSON.stringify({
success: true,
data: userInfo
}),
{
status: 200,
headers: {
'Content-Type': 'application/json',
},
}
);
} catch (error) {
console.error(error);
return new Response(
JSON.stringify({
success: false,
message: '服务器错误'
}),
{
status: 500,
headers: {
'Content-Type': 'application/json',
},
}
);
}
};

View File

@@ -0,0 +1,88 @@
interface Env {
bgdb: D1Database;
}
export const onRequestPost: PagesFunction<Env> = async (context) => {
try {
const { env, data, request } = context;
// 解析请求体
const body = await request.json();
const { nickname } = body;
// 验证昵称
if (!nickname || typeof nickname !== 'string' || nickname.length > 32) {
return new Response(
JSON.stringify({
success: false,
message: '昵称格式不正确'
}),
{
status: 400,
headers: {
'Content-Type': 'application/json',
},
}
);
}
// 更新数据库中的昵称
const db = env.bgdb;
const result = await db.prepare(`
UPDATE users
SET nickname = ?,
updated_at = DATETIME('now')
WHERE id = ?
`).bind(nickname, data.user.userId).run();
if (!result.success) {
return new Response(
JSON.stringify({
success: false,
message: '更新失败'
}),
{
status: 500,
headers: {
'Content-Type': 'application/json',
},
}
);
}
// 获取更新后的用户信息
const userInfo = await db.prepare(`
SELECT id, phone, nickname, avatar_url, status
FROM users
WHERE id = ?
`).bind(data.user.userId).first();
return new Response(
JSON.stringify({
success: true,
data: userInfo
}),
{
status: 200,
headers: {
'Content-Type': 'application/json',
},
}
);
} catch (error) {
console.error(error);
return new Response(
JSON.stringify({
success: false,
message: '服务器错误'
}),
{
status: 500,
headers: {
'Content-Type': 'application/json',
},
}
);
}
};