mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-10 07:48:37 +01:00
add email login
This commit is contained in:
24
dashboard/server/api/auth/confirm_email.ts
Normal file
24
dashboard/server/api/auth/confirm_email.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
import { createUserJwt, readRegisterJwt } from '~/server/AuthManager';
|
||||
import { UserModel } from '@schema/UserSchema';
|
||||
import { PasswordModel } from '@schema/PasswordSchema';
|
||||
import EmailService from '@services/EmailService';
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const { register_code } = getQuery(event);
|
||||
|
||||
const data = readRegisterJwt(register_code as string);
|
||||
if (!data) return setResponseStatus(event, 400, 'Error decoding register_code');
|
||||
|
||||
try {
|
||||
await PasswordModel.create({ email: data.email, password: data.password })
|
||||
await UserModel.create({ email: data.email, given_name: '', name: 'EmailLogin', locale: '', picture: '', created_at: Date.now() });
|
||||
setImmediate(() => { EmailService.sendWelcomeEmail(data.email); });
|
||||
const jwt = createUserJwt({ email: data.email, name: 'EmailLogin' });
|
||||
return sendRedirect(event,`https://dashboard.litlyx.com/jwt_login?jwt_login=${jwt}`);
|
||||
} catch (ex) {
|
||||
return setResponseStatus(event, 400, 'Error creating user');
|
||||
}
|
||||
|
||||
});
|
||||
24
dashboard/server/api/auth/login.post.ts
Normal file
24
dashboard/server/api/auth/login.post.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
import { createUserJwt } from '~/server/AuthManager';
|
||||
import { UserModel } from '@schema/UserSchema';
|
||||
import crypto from 'crypto';
|
||||
import { PasswordModel } from '@schema/PasswordSchema';
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const { email, password } = await readBody(event);
|
||||
|
||||
const user = await UserModel.findOne({ email });
|
||||
|
||||
if (!user) return { error: true, message: 'Email or Password wrong' }
|
||||
|
||||
const hash = crypto.createHash('sha256');
|
||||
const hashedPassword = hash.update(password + '_litlyx').digest('hex');
|
||||
|
||||
const target = await PasswordModel.findOne({ email, password: hashedPassword });
|
||||
|
||||
if (!target) return { error: true, message: 'Email or Password wrong' }
|
||||
|
||||
return { error: false, access_token: createUserJwt({ email: target.email, name: user.name }) }
|
||||
|
||||
});
|
||||
45
dashboard/server/api/auth/register.post.ts
Normal file
45
dashboard/server/api/auth/register.post.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
import { createRegisterJwt, createUserJwt } from '~/server/AuthManager';
|
||||
import { UserModel } from '@schema/UserSchema';
|
||||
import { RegisterModel } from '@schema/RegisterSchema';
|
||||
import EmailService from '@services/EmailService';
|
||||
import crypto from 'crypto';
|
||||
|
||||
function canRegister(email: string, password: string) {
|
||||
if (email.length == 0) return false;
|
||||
if (!email.includes('@')) return false;
|
||||
if (!email.includes('.')) return false;
|
||||
if (password.length < 6) return false;
|
||||
return true;
|
||||
};
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const { email, password } = await readBody(event);
|
||||
|
||||
if (!canRegister(email, password)) return setResponseStatus(event, 400, 'Email or Password not match criteria');
|
||||
|
||||
const user = await UserModel.findOne({ email });
|
||||
|
||||
if (user) return {
|
||||
error: true,
|
||||
message: 'Email already registered'
|
||||
}
|
||||
|
||||
const hash = crypto.createHash('sha256');
|
||||
const hashedPassword = hash.update(password + '_litlyx').digest('hex');
|
||||
|
||||
const jwt = createRegisterJwt(email, hashedPassword);
|
||||
|
||||
await RegisterModel.create({ email, password: hashedPassword });
|
||||
|
||||
setImmediate(() => {
|
||||
EmailService.sendConfirmEmail(email, `https://dashboard.litlyx.com/api/auth/confirm_email?register_code=${jwt}`);
|
||||
});
|
||||
|
||||
return {
|
||||
error: false,
|
||||
message: 'OK'
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user