@tayar/auth
Version:
Authentication Kit for React and Next.js
44 lines • 1.25 kB
JavaScript
// src/login.ts
import { compare } from "bcrypt";
import { sign } from "jsonwebtoken";
async function login(email, password, userType, config) {
try {
const { models } = config.mongoose;
const user = await models.User.findOne({ email });
if (!user) {
throw new Error("User not found");
}
const validPassword = await compare(password, user.password);
if (!validPassword) {
throw new Error("User not found");
}
const modelType = userType.charAt(0).toUpperCase() + userType.slice(1);
if (!models[modelType]) {
throw new Error("User not found");
}
const additionalData = await models[modelType].findOne({ uid: user._id });
if (!additionalData) {
throw new Error("User not found");
}
const token = sign({ _id: user._id }, config.accessToken, {
expiresIn: "1h"
});
const refreshToken = sign({ _id: user._id }, config.refreshToken, {
expiresIn: "7d"
});
return {
success: true,
user: { ...user.toObject() },
[userType]: { ...additionalData.toObject() },
token,
refreshToken
};
} catch (error) {
console.error("Login error:", error);
throw error;
}
}
export {
login
};
//# sourceMappingURL=index.mjs.map