Skip to content

Commit 60f263e

Browse files
get user identity on log in
1 parent fb4d9ed commit 60f263e

File tree

5 files changed

+35
-21
lines changed

5 files changed

+35
-21
lines changed

web-frontend/src/App.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,38 @@ import Container from "@mui/material/Container";
44
import ErrorBoundary from "./components/error-boundary";
55
import { Outlet } from "react-router-dom";
66
import TiledAppBar from "./components/tiled-app-bar";
7-
import UserContext, {userObjectContext, userUpdateFunctionTemplate} from './context/user';
7+
import UserContext, {userObjectContext} from './context/user';
88

99

1010

1111

1212
function App() {
1313

1414
const [userContext, setUserContext] = React.useState(userObjectContext)
15-
16-
// Create funtion to update the current context, prioritizing new over old changed properties
15+
const [user, setUser] = React.useState({user: ""});
16+
const value = { user, setUser };
17+
// Create function to update the current context, prioritizing new over old changed properties
1718
const updateContext = (contextUpdates = {}) =>
1819
setUserContext(currentContext => ({ ...currentContext, ...contextUpdates }))
1920

2021
// useEffect prevents the entire context for rerendering when component rerenders
2122
React.useEffect(() => {
22-
if (userContext?.updateUser === userUpdateFunctionTemplate) {
23+
2324
updateContext({
24-
updateStatus: (value: string) => updateContext({ status: value }),
25+
updateStatus: (value: string) => updateContext({ user: value }),
2526
})
26-
}
27-
}, [userContext?.updateUser])
27+
28+
}, [])
2829
return (
2930
<Container>
30-
<UserContext.Provider value={userContext} >
31+
{/* <UserContext.Provider value={user.user} > */}
3132
<AxiosInterceptor>
3233
<TiledAppBar />
3334
<ErrorBoundary>
3435
<Outlet />
3536
</ErrorBoundary>
3637
</AxiosInterceptor>
37-
</UserContext.Provider>
38+
{/* </UserContext.Provider> */}
3839
</Container>
3940
);
4041
}

web-frontend/src/client.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,33 +66,45 @@ interface Props {
6666
const AxiosInterceptor = ({children}: Props) => {
6767

6868
const navigate = useNavigate();
69-
const userContext = useContext(UserContext);
69+
const {user, setUser} = useContext(UserContext);
7070

7171
useEffect(() => {
7272

73-
const responseInterceptor = (response: AxiosResponse) => {
73+
const responseInterceptor = async (response: AxiosResponse) => {
7474
// if 401, delete local toke
7575

7676
// looku
77-
const refreshToken = response.data.access_token;
77+
const refreshToken = response.data.refresh_token;
7878
if (refreshToken){
7979
localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken)
8080
localStorage.setItem(ACCESS_TOKEN_KEY, response.data.access_token);
81+
// follow up request to /api/whoami to get user info
82+
const whomiResponse = await axiosInstance.get("/auth/whoami");
83+
//what provider was this? this is ugly
84+
const provider = response.config.url!.split("/")[2];
85+
//now find the identity for this provider
86+
// I guess a types file for tiled would be could, we could avoid the any here
87+
const identity = whomiResponse.data.identities.find((identity: any) => identity.provider === provider);
88+
//update user context
89+
setUser(identity.id);
8190
}
8291

83-
//uddate user
92+
93+
94+
95+
8496
return response;
8597
}
8698

87-
const requestInterceptor = (requestConfig: AxiosRequestConfig) => {
99+
const requestInterceptor = (requestConfig: AxiosRequestConfig) => {
88100
// for all requests, lookup refresh token in local storage
89101
// if found, add to the reqeust
90102
const storedAccessToken = localStorage.getItem(ACCESS_TOKEN_KEY);
91103
if (storedAccessToken){
92104
if (!requestConfig.headers){
93105
requestConfig.headers = {};
94106
}
95-
requestConfig.headers["Authorization"] = "Bearer: " + storedAccessToken;
107+
requestConfig.headers["Authorization"] = "Bearer " + storedAccessToken;
96108
}
97109
return requestConfig;
98110
}

web-frontend/src/components/tiled-app-bar.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Typography from "@mui/material/Typography";
88
import UserContext from '../context/user';
99
const TiledAppBar = () => {
1010
const user = React.useContext(UserContext);
11+
1112
return (
1213
<AppBar position="static">
1314
<Container maxWidth="xl">
@@ -31,7 +32,7 @@ const TiledAppBar = () => {
3132
</Button>
3233
</Typography>
3334
<Typography>
34-
{user}
35+
{user.user}
3536
</Typography>
3637
</Toolbar>
3738
</Container>

web-frontend/src/context/user.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import React from 'react';
22

3-
// required to compare function by reference when context changes
4-
export const userUpdateFunctionTemplate = () => {}
3+
// // required to compare function by reference when context changes
4+
// export const userUpdateFunctionTemplate = () => {}
55

66
export const userObjectContext = {
7-
name: "Ford Prefect",
8-
updateUser: userUpdateFunctionTemplate,
7+
user: "Ford Prefect",
8+
setUser: (user: string) => {console.log( user)}
99
}
1010

1111

web-frontend/src/routes/login.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Box from '@mui/material/Box';
1+
22
import Auth from '../components/auth';
33
import { useParams } from "react-router-dom";
44

0 commit comments

Comments
 (0)