mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-10 07:48:37 +01:00
add dashboard
This commit is contained in:
55
dashboard/server/api/auth/google_login.post.ts
Normal file
55
dashboard/server/api/auth/google_login.post.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
|
||||
import { OAuth2Client } from 'google-auth-library';
|
||||
import { createUserJwt } from '~/server/AuthManager';
|
||||
import { UserModel } from '@schema/UserSchema';
|
||||
import { sendWelcomeEmail } from '@services/EmailService';
|
||||
|
||||
const { GOOGLE_AUTH_CLIENT_SECRET, GOOGLE_AUTH_CLIENT_ID } = useRuntimeConfig()
|
||||
|
||||
const client = new OAuth2Client({
|
||||
clientId: GOOGLE_AUTH_CLIENT_ID,
|
||||
clientSecret: GOOGLE_AUTH_CLIENT_SECRET
|
||||
});
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
const body = await readBody(event)
|
||||
|
||||
const origin = event.headers.get('origin');
|
||||
|
||||
const tokenResponse = await client.getToken({
|
||||
code: body.code,
|
||||
redirect_uri: origin || ''
|
||||
});
|
||||
|
||||
const tokens = tokenResponse.tokens;
|
||||
|
||||
const ticket = await client.verifyIdToken({
|
||||
idToken: tokens.id_token || '',
|
||||
audience: GOOGLE_AUTH_CLIENT_ID,
|
||||
});
|
||||
|
||||
const payload = ticket.getPayload();
|
||||
if (!payload) return { error: true, access_token: '' };
|
||||
|
||||
|
||||
const user = await UserModel.findOne({ email: payload.email });
|
||||
if (user) return { error: false, access_token: createUserJwt({ email: user.email, name: user.name }) }
|
||||
|
||||
const newUser = new UserModel({
|
||||
email: payload.email,
|
||||
given_name: payload.given_name,
|
||||
name: payload.name,
|
||||
locale: payload.locale,
|
||||
picture: payload.picture,
|
||||
created_at: Date.now()
|
||||
});
|
||||
|
||||
const savedUser = await newUser.save();
|
||||
|
||||
setImmediate(() => {
|
||||
if (payload.email) sendWelcomeEmail(payload.email);
|
||||
});
|
||||
|
||||
return { error: false, access_token: createUserJwt({ email: savedUser.email, name: savedUser.name }) }
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user