finalization of create token logic

This commit is contained in:
Sheen Capadngan
2023-08-06 21:46:20 +08:00
parent 04fdccc45d
commit 3a9bf5409b
4 changed files with 29 additions and 30 deletions

View File

@@ -56,10 +56,9 @@ export const login1 = async (req: Request, res: Response) => {
if (!user) throw new Error("Failed to find user");
const shouldValidateProviderAuth = (user.authProvider && user.authProvider !== AuthProvider.EMAIL)
|| (user.authProviders && !user.authProviders?.includes(AuthProvider.EMAIL))
if (shouldValidateProviderAuth) {
let authProviders = [...(user.authProviders || []), user.authProvider];
if (!authProviders.includes(AuthProvider.EMAIL)) {
await validateProviderAuthToken({
email,
user,
@@ -119,10 +118,9 @@ export const login2 = async (req: Request, res: Response) => {
if (!user) throw new Error("Failed to find user");
const shouldValidateProviderAuth = (user.authProvider && user.authProvider !== AuthProvider.EMAIL)
|| (user.authProviders && !user.authProviders?.includes(AuthProvider.EMAIL))
if (shouldValidateProviderAuth) {
let authProviders = [...(user.authProviders || []), user.authProvider];
if (!authProviders.includes(AuthProvider.EMAIL)) {
await validateProviderAuthToken({
email,
user,

View File

@@ -390,11 +390,10 @@ export const validateProviderAuthToken = async ({
jwt.verify(providerAuthToken, await getJwtProviderAuthSecret())
);
const doesProviderMatch = (user.authProvider && user.authProvider === decodedToken.authProvider)
|| (user.authProviders && user.authProviders.includes(decodedToken.authProvider));
let authProviders = [...(user.authProviders || []), user.authProvider];
if (
!doesProviderMatch ||
!authProviders.includes(decodedToken.authProvider) ||
decodedToken.email !== email
) {
throw new Error("Invalid authentication credentials.")

View File

@@ -46,6 +46,7 @@ const userSchema = new Schema<IUser>(
},
authProviders: [{
type: String,
enum: AuthProvider,
}],
email: {
type: String,

View File

@@ -97,20 +97,22 @@ const initializePassport = async () => {
email
}).select("+publicKey");
if (user && user.authProvider !== AuthProvider.GOOGLE) {
done(InternalServerError());
}
if (!user) {
user = await new User({
email,
authProvider: AuthProvider.GOOGLE,
authProviders: [AuthProvider.GOOGLE],
authId: profile.id,
firstName: profile.name.givenName,
lastName: profile.name.familyName
}).save();
}
let authProviders = [...(user.authProviders || []), user.authProvider];
if (!authProviders.includes(AuthProvider.GOOGLE)) {
done(InternalServerError());
}
const isUserCompleted = !!user.publicKey;
const providerAuthToken = createToken({
payload: {
@@ -118,8 +120,7 @@ const initializePassport = async () => {
email: user.email,
firstName: user.firstName,
lastName: user.lastName,
authProvider: user.authProvider,
authProviders: user.authProviders,
authProvider: AuthProvider.GOOGLE,
isUserCompleted,
...(req.query.state ? {
callbackPort: req.query.state as string
@@ -151,21 +152,23 @@ const initializePassport = async () => {
let user = await User.findOne({
email
}).select("+publicKey");
if (user && user.authProvider !== AuthProvider.GITHUB) {
done(InternalServerError());
}
if (!user) {
user = await new User({
email: email,
authProvider: AuthProvider.GITHUB,
authProviders: [AuthProvider.GITHUB],
authId: profile.id,
firstName: profile.displayName,
lastName: ""
}).save();
}
let authProviders = [...(user.authProviders || []), user.authProvider];
if (!authProviders.includes(AuthProvider.GITHUB)) {
done(InternalServerError());
}
const isUserCompleted = !!user.publicKey;
const providerAuthToken = createToken({
payload: {
@@ -173,8 +176,7 @@ const initializePassport = async () => {
email: user.email,
firstName: user.firstName,
lastName: user.lastName,
authProvider: user.authProvider,
authProviders: user.authProviders,
authProvider: AuthProvider.GITHUB,
isUserCompleted,
...(req.query.state ? {
callbackPort: req.query.state as string
@@ -249,7 +251,7 @@ const initializePassport = async () => {
await User.findByIdAndUpdate(
user._id,
{
authProvider: req.ssoConfig.authProvider
authProviders: [req.ssoConfig.authProvider]
},
{
new: true
@@ -281,7 +283,7 @@ const initializePassport = async () => {
} else {
user = await new User({
email,
authProvider: req.ssoConfig.authProvider,
authProviders: [req.ssoConfig.authProvider],
firstName,
lastName
}).save();
@@ -303,8 +305,7 @@ const initializePassport = async () => {
firstName,
lastName,
organizationName: organization?.name,
authProvider: user.authProvider,
authProviders: user.authProviders,
authProvider: req.ssoConfig.authProvider,
isUserCompleted,
...(req.body.RelayState ? {
callbackPort: req.body.RelayState as string