modified backend controllers to support new auth providers

This commit is contained in:
Sheen Capadngan
2023-08-06 19:45:27 +08:00
parent 5604232aea
commit 04fdccc45d
5 changed files with 25 additions and 6 deletions

View File

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

View File

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

View File

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

View File

@@ -119,6 +119,7 @@ const initializePassport = async () => {
firstName: user.firstName,
lastName: user.lastName,
authProvider: user.authProvider,
authProviders: user.authProviders,
isUserCompleted,
...(req.query.state ? {
callbackPort: req.query.state as string
@@ -173,6 +174,7 @@ const initializePassport = async () => {
firstName: user.firstName,
lastName: user.lastName,
authProvider: user.authProvider,
authProviders: user.authProviders,
isUserCompleted,
...(req.query.state ? {
callbackPort: req.query.state as string
@@ -302,6 +304,7 @@ const initializePassport = async () => {
lastName,
organizationName: organization?.name,
authProvider: user.authProvider,
authProviders: user.authProviders,
isUserCompleted,
...(req.body.RelayState ? {
callbackPort: req.body.RelayState as string

View File

@@ -33,6 +33,10 @@ export const AuthMethodSection = () => {
const { user } = useUser();
const { mutateAsync, isLoading } = useUpdateUserAuthProviders();
const defaultAuthMethods = user.authProviders?.length ?
user.authProviders :
[user?.authProvider ?? "email"];
const {
reset,
handleSubmit,
@@ -40,7 +44,7 @@ export const AuthMethodSection = () => {
watch,
} = useForm<FormData>({
defaultValues: {
authMethods: [user?.authProvider ?? "email"]
authMethods: defaultAuthMethods,
},
resolver: yupResolver(schema)
});
@@ -50,7 +54,7 @@ export const AuthMethodSection = () => {
useEffect(() => {
if (user) {
reset({
authMethods: [user?.authProvider ?? "email"]
authMethods: defaultAuthMethods,
});
}
}, [user]);