Skip to content

Commit

Permalink
feat: resolve issues with social providers
Browse files Browse the repository at this point in the history
  • Loading branch information
lewtakm committed Feb 24, 2021
1 parent 77158b1 commit 5feed38
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 27 deletions.
21 changes: 12 additions & 9 deletions src/providers/IntentbaseProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { FC } from 'react';
import React, { useRef, FC } from 'react';
import { ThemeProvider } from 'styled-components';
import { MuiThemeProvider, StylesProvider } from '@material-ui/core/styles';
import { Theme } from '@material-ui/core/styles/createMuiTheme';
Expand All @@ -17,7 +17,7 @@ interface IntentbaseProps {
awsCognitoRegion?: string;
awsCognitoUserPoolId: string;
awsCognitoUserPoolWebClientId: string;
awsCognitoOAuth: OAuthOpts;
awsCognitoOAuth?: OAuthOpts;
environment?: Environment;
getApiUser?: (cognitoUser?: CognitoUser) => Promise<any>;
}
Expand All @@ -32,14 +32,17 @@ export const IntentbaseProvider: FC<IntentbaseProps> = ({
environment = 'production',
getApiUser,
}) => {
const isAmplifyConfiguredRef = useRef(false);
try {
console.log('Amplify Setup');
configureAmplify(
awsCognitoRegion,
awsCognitoUserPoolId,
awsCognitoUserPoolWebClientId,
awsCognitoOAuth,
);
if (!isAmplifyConfiguredRef.current) {
isAmplifyConfiguredRef.current = true;
configureAmplify(
awsCognitoRegion,
awsCognitoUserPoolId,
awsCognitoUserPoolWebClientId,
awsCognitoOAuth,
);
}
} catch (error) {
if (environment !== 'production') {
console.error('AWS Secrets required');
Expand Down
33 changes: 19 additions & 14 deletions src/providers/auth/useCognitoUser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useEffect, useState, useRef } from 'react';
import { Hub } from '@aws-amplify/core';

export interface CognitoUser {
email: string;
username: string;
emailVerified: boolean;
accessToken: {
jwtToken: string;
Expand Down Expand Up @@ -31,16 +31,16 @@ export interface CognitoUser {
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
function mapCognitoUser(user: any): CognitoUser | undefined {
const mapCognitoUser = (user: any): CognitoUser | undefined => {
if (
user?.attributes?.email &&
(user?.attributes?.email || user?.username) &&
user?.signInUserSession?.accessToken?.jwtToken &&
user?.signInUserSession?.idToken?.jwtToken &&
user?.signInUserSession?.refreshToken?.token
) {
return {
email: user.attributes.email,
emailVerified: user.attributes.email_verified === 'True',
username: user?.attributes?.email || user.username,
emailVerified: user?.attributes?.email_verified === 'True',
accessToken: user.signInUserSession.accessToken,
idToken: user.signInUserSession.idToken,
refreshToken: user.signInUserSession.refreshToken,
Expand All @@ -56,12 +56,12 @@ function mapCognitoUser(user: any): CognitoUser | undefined {
}

return undefined;
}
};

export function useCognitoUser(): {
export const useCognitoUser = (): {
user?: CognitoUser;
loading: boolean;
} {
} => {
const [state, setState] = useState<{ user?: CognitoUser; loading: boolean }>({
loading: true,
});
Expand All @@ -71,35 +71,40 @@ export function useCognitoUser(): {
isMountedRef.current = true;

const updateUser = async () => {
console.log('Update User Event');
try {
const cognitoUser = await Auth.currentAuthenticatedUser({
bypassCache: false,
});
console.log('Cognito user:', cognitoUser);
if (isMountedRef.current) {
setState({ user: mapCognitoUser(cognitoUser), loading: false });
}
} catch (error) {
console.warn('Error', error);
if (isMountedRef.current) {
setState({ user: undefined, loading: false });
}
}
};

// eslint-disable-next-line @typescript-eslint/no-misused-promises
Hub.listen('auth', updateUser);
Hub.listen('auth', ({ payload: { event } }) => {
switch (event) {
case 'signIn':
case 'cognitoHostedUI':
updateUser();
break;
default:
break;
}
});

updateUser();

return () => {
isMountedRef.current = false;

// eslint-disable-next-line @typescript-eslint/no-misused-promises
Hub.remove('auth', updateUser);
};
}, [isMountedRef]);

return state;
}
};
6 changes: 2 additions & 4 deletions src/utils/configureAmplify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,14 @@ export const configureAmplify = (
region: string,
userPoolId: string,
userPoolWebClientId: string,
oauth: OAuthOpts,
oauth?: OAuthOpts,
): void => {
Amplify.configure({
Auth: {
region,
userPoolId,
userPoolWebClientId,
oauth: {
...oauth,
},
...(oauth && { oauth }),
},
});
};

0 comments on commit 5feed38

Please sign in to comment.