初次提交
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import { generateState, getRedirectUri } from '~~/server/utils/oauth'
|
||||
import { getOAuthStrategy } from '~~/server/utils/oauth-strategies'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const provider = getRouterParam(event, 'provider')
|
||||
if (!provider) {
|
||||
throw createError({ statusCode: 400, message: 'Missing provider' })
|
||||
}
|
||||
|
||||
const strategy = getOAuthStrategy(provider)
|
||||
|
||||
// 获取 Origin
|
||||
const headers = getRequestHeaders(event)
|
||||
const protocol = headers['x-forwarded-proto'] || 'http'
|
||||
const host = headers['host']
|
||||
const origin = `${protocol}://${host}`
|
||||
|
||||
const redirectUri = getRedirectUri(provider)
|
||||
|
||||
const { state, csrf } = generateState(origin, provider)
|
||||
|
||||
setCookie(event, 'oauth_csrf', csrf, {
|
||||
httpOnly: true,
|
||||
secure: process.env.NODE_ENV === 'production',
|
||||
sameSite: 'lax',
|
||||
maxAge: 60 * 10, // 10分钟
|
||||
path: '/'
|
||||
})
|
||||
|
||||
const url = strategy.getAuthorizeUrl(redirectUri, state)
|
||||
|
||||
return sendRedirect(event, url)
|
||||
})
|
||||
Reference in New Issue
Block a user