mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 00:40:14 +01:00
🚀 refactor: Remove Local Login Redundancies (#3002)
This commit is contained in:
parent
35f8053f45
commit
1da92111aa
4 changed files with 23 additions and 30 deletions
|
|
@ -1,42 +1,20 @@
|
||||||
const { setAuthTokens } = require('~/server/services/AuthService');
|
const { setAuthTokens } = require('~/server/services/AuthService');
|
||||||
const { getUserById, updateUser } = require('~/models/userMethods');
|
|
||||||
const { isEnabled, checkEmailConfig } = require('~/server/utils');
|
|
||||||
const { logger } = require('~/config');
|
const { logger } = require('~/config');
|
||||||
|
|
||||||
// Unix timestamp for 2024-06-07 15:20:18 Eastern Time
|
|
||||||
const verificationEnabledTimestamp = 1717788018;
|
|
||||||
|
|
||||||
const loginController = async (req, res) => {
|
const loginController = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const user = await getUserById(req.user._id, '-password -__v');
|
if (!req.user) {
|
||||||
|
|
||||||
// If user doesn't exist, return error
|
|
||||||
if (!user) {
|
|
||||||
return res.status(400).json({ message: 'Invalid credentials' });
|
return res.status(400).json({ message: 'Invalid credentials' });
|
||||||
}
|
}
|
||||||
|
|
||||||
const emailEnabled = checkEmailConfig();
|
const { password: _, __v, ...user } = req.user;
|
||||||
const userCreatedAtTimestamp = Math.floor(new Date(user.createdAt).getTime() / 1000);
|
user.id = user._id.toString();
|
||||||
|
|
||||||
if (
|
const token = await setAuthTokens(req.user._id, res);
|
||||||
!emailEnabled &&
|
|
||||||
!user.emailVerified &&
|
|
||||||
userCreatedAtTimestamp < verificationEnabledTimestamp
|
|
||||||
) {
|
|
||||||
await updateUser(user._id, { emailVerified: true });
|
|
||||||
user.emailVerified = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!user.emailVerified && !isEnabled(process.env.ALLOW_UNVERIFIED_EMAIL_LOGIN)) {
|
|
||||||
return res.status(422).json({ message: 'Email not verified' });
|
|
||||||
}
|
|
||||||
|
|
||||||
const token = await setAuthTokens(user._id, res);
|
|
||||||
|
|
||||||
return res.status(200).send({ token, user });
|
return res.status(200).send({ token, user });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error('[loginController]', err);
|
logger.error('[loginController]', err);
|
||||||
|
|
||||||
return res.status(500).json({ message: 'Something went wrong' });
|
return res.status(500).json({ message: 'Something went wrong' });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -297,7 +297,7 @@ const resetPassword = async (userId, token, password) => {
|
||||||
/**
|
/**
|
||||||
* Set Auth Tokens
|
* Set Auth Tokens
|
||||||
*
|
*
|
||||||
* @param {String} userId
|
* @param {String | ObjectId} userId
|
||||||
* @param {Object} res
|
* @param {Object} res
|
||||||
* @param {String} sessionId
|
* @param {String} sessionId
|
||||||
* @returns
|
* @returns
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ const jwtLogin = async () =>
|
||||||
},
|
},
|
||||||
async (payload, done) => {
|
async (payload, done) => {
|
||||||
try {
|
try {
|
||||||
const user = await getUserById(payload?.id);
|
const user = await getUserById(payload?.id, '-password -__v');
|
||||||
user.id = user._id.toString();
|
user.id = user._id.toString();
|
||||||
if (user) {
|
if (user) {
|
||||||
done(null, user);
|
done(null, user);
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
const { errorsToString } = require('librechat-data-provider');
|
const { errorsToString } = require('librechat-data-provider');
|
||||||
const { Strategy: PassportLocalStrategy } = require('passport-local');
|
const { Strategy: PassportLocalStrategy } = require('passport-local');
|
||||||
const { findUser, comparePassword } = require('~/models');
|
const { findUser, comparePassword, updateUser } = require('~/models');
|
||||||
|
const { isEnabled, checkEmailConfig } = require('~/server/utils');
|
||||||
const { loginSchema } = require('./validators');
|
const { loginSchema } = require('./validators');
|
||||||
const { isEnabled } = require('~/server/utils');
|
|
||||||
const logger = require('~/utils/logger');
|
const logger = require('~/utils/logger');
|
||||||
|
|
||||||
|
// Unix timestamp for 2024-06-07 15:20:18 Eastern Time
|
||||||
|
const verificationEnabledTimestamp = 1717788018;
|
||||||
|
|
||||||
async function validateLoginRequest(req) {
|
async function validateLoginRequest(req) {
|
||||||
const { error } = loginSchema.safeParse(req.body);
|
const { error } = loginSchema.safeParse(req.body);
|
||||||
return error ? errorsToString(error.errors) : null;
|
return error ? errorsToString(error.errors) : null;
|
||||||
|
|
@ -33,6 +36,18 @@ async function passportLogin(req, email, password, done) {
|
||||||
return done(null, false, { message: 'Incorrect password.' });
|
return done(null, false, { message: 'Incorrect password.' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const emailEnabled = checkEmailConfig();
|
||||||
|
const userCreatedAtTimestamp = Math.floor(new Date(user.createdAt).getTime() / 1000);
|
||||||
|
|
||||||
|
if (
|
||||||
|
!emailEnabled &&
|
||||||
|
!user.emailVerified &&
|
||||||
|
userCreatedAtTimestamp < verificationEnabledTimestamp
|
||||||
|
) {
|
||||||
|
await updateUser(user._id, { emailVerified: true });
|
||||||
|
user.emailVerified = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!user.emailVerified && !isEnabled(process.env.ALLOW_UNVERIFIED_EMAIL_LOGIN)) {
|
if (!user.emailVerified && !isEnabled(process.env.ALLOW_UNVERIFIED_EMAIL_LOGIN)) {
|
||||||
logError('Passport Local Strategy - Email not verified', { email });
|
logError('Passport Local Strategy - Email not verified', { email });
|
||||||
logger.error(`[Login] [Login failed] [Username: ${email}] [Request-IP: ${req.ip}]`);
|
logger.error(`[Login] [Login failed] [Username: ${email}] [Request-IP: ${req.ip}]`);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue