1 changed files with 43 additions and 0 deletions
@ -0,0 +1,43 @@ |
|||
import { registerSchema } from '../../utils/auth/validation' |
|||
import { verifyCaptcha } from '../../utils/auth/captcha' |
|||
import { dbGlobal } from 'drizzle-pkg/lib/db' |
|||
import { users } from 'drizzle-pkg/lib/schema/auth' |
|||
import { eq } from 'drizzle-orm' |
|||
import { hash } from 'bcryptjs' |
|||
|
|||
export default defineWrappedResponseHandler(async (event) => { |
|||
const body = await readBody(event) |
|||
|
|||
const parsed = registerSchema.safeParse(body) |
|||
if (!parsed.success) { |
|||
return R.error(parsed.error.issues[0]?.message || '表单验证失败', null) |
|||
} |
|||
|
|||
const { username, password, captchaToken, captchaText } = parsed.data |
|||
|
|||
if (!verifyCaptcha(captchaToken, captchaText)) { |
|||
return R.error('验证码错误或已过期', null) |
|||
} |
|||
|
|||
const existing = await dbGlobal |
|||
.select() |
|||
.from(users) |
|||
.where(eq(users.username, username)) |
|||
if (existing.length > 0) { |
|||
return R.error('用户名已存在', null) |
|||
} |
|||
|
|||
const hashedPassword = await hash(password, 10) |
|||
|
|||
const result = await dbGlobal |
|||
.insert(users) |
|||
.values({ |
|||
username, |
|||
password: hashedPassword, |
|||
role: 'user', |
|||
status: 'active', |
|||
}) |
|||
.returning({ id: users.id }) |
|||
|
|||
return R.success({ id: result[0].id, username }) |
|||
}) |
|||
Loading…
Reference in new issue