diff --git a/src/pages/oauth.tsx b/src/pages/oauth.tsx index 06ebd58..bf047fd 100644 --- a/src/pages/oauth.tsx +++ b/src/pages/oauth.tsx @@ -2,11 +2,13 @@ import { Hono } from 'hono' import { FC } from 'hono/jsx' import { Layout } from '@/layout/layout' import { QRCODE_URL } from '@/env' +import { generateRandomString } from '@/utils/helper' const app = new Hono() // 通过验证码登录的前端表单 const OAuthLogin: FC = () => { + const state = generateRandomString(16) return (
@@ -18,6 +20,7 @@ const OAuthLogin: FC = () => {

+
diff --git a/src/routes/auth.ts b/src/routes/auth.ts index 1f38b3a..fbfffea 100644 --- a/src/routes/auth.ts +++ b/src/routes/auth.ts @@ -66,7 +66,7 @@ app.post('/loginByOAuth', async (c) => { } else if (contentType === 'application/json') { body = await c.req.json() } - const { code } = body + const { code, state } = body const scene = 'login' const verifyCodeRepository = (await getDataSource()).getRepository(VerifyCode) const verifyCode = await verifyCodeRepository.findOne({ where: { code, scene, used: false, expiredAt: MoreThanOrEqual(dayjs().add(-5, 'minutes').toDate()) }, relations: ['user'] }) @@ -79,7 +79,13 @@ app.post('/loginByOAuth', async (c) => { const user = verifyCode.user const accessCode = await createAccessCode(user) // 将授权码返回给客户端 - const redirectUrl = `${OAUTH_REDIRECT_URL}?accessCode=${accessCode.code}` + const query = new URLSearchParams({ + accessCode: accessCode.code, + state, + }) + const url = new URL(OAUTH_REDIRECT_URL) + url.search = query.toString() + const redirectUrl = url.toString() return c.redirect(redirectUrl, 302) })