Skip to content

Commit ada020b

Browse files
committed
Integrate login with API
1 parent dc4f353 commit ada020b

File tree

4 files changed

+80
-19
lines changed

4 files changed

+80
-19
lines changed

UIcode/client/src/Components/LoginLogoutButton/index.jsx

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import React from "react";
1+
import React, { useCallback } from "react";
22
import { GoogleLogin, GoogleLogout } from "react-google-login";
33
import NavLinkStyle from "Styled/NavLink";
44
import styled from "styled-components";
5-
import { googleLoginToApi } from "Services/auth";
65
import { useContext } from "react";
76
import { authContext } from "Providers/AuthProvider";
87

@@ -11,19 +10,21 @@ const StyledButton = styled.button`
1110
`;
1211

1312
const LoginLogoutButton = ({ defaultButton = false }) => {
14-
const { token, setToken } = useContext(authContext);
13+
const { googleToken, loginWithGoogleToken, logout } = useContext(authContext);
1514

16-
const loginSuccess = (response) => {
17-
setToken(response.tokenId);
18-
googleLoginToApi(response.tokenId).then(console.log, console.log);
19-
};
15+
const loginSuccess = useCallback(
16+
(response) => {
17+
loginWithGoogleToken(response.tokenId);
18+
},
19+
[loginWithGoogleToken]
20+
);
2021

2122
const loginFail = (response) => {
2223
alert("Login failed");
2324
};
2425

2526
const onLogout = (response) => {
26-
setToken(null);
27+
logout();
2728
};
2829

2930
const render = defaultButton
@@ -34,8 +35,7 @@ const LoginLogoutButton = ({ defaultButton = false }) => {
3435
</StyledButton>
3536
);
3637

37-
console.log({ token });
38-
return token ? (
38+
return googleToken ? (
3939
<GoogleLogout
4040
clientId={process.env.REACT_APP_GOOGLE_CLIENT_ID}
4141
buttonText="Logout"

UIcode/client/src/Pages/Contribute/index.jsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const Contribute = () => {
1818
const [step, setStep] = useState(0);
1919
const [selectedTestResult, setSelectedTestResult] = useState("positive");
2020
const [testDate, setTestDate] = useState(null);
21-
const { token } = useContext(authContext);
21+
const { isLoggedIn } = useContext(authContext);
2222

2323
const showButtons = step === 1;
2424

@@ -51,7 +51,7 @@ const Contribute = () => {
5151

5252
return (
5353
<Wrapper>
54-
{token ? (
54+
{isLoggedIn ? (
5555
<>
5656
<CurrentStep />
5757
{showButtons && (
+59-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,69 @@
1-
import React, { useState } from "react";
1+
import React, { useState, useCallback } from "react";
2+
import Cookies from "js-cookie";
3+
import { googleLoginToApi, getMe } from "Services/auth";
24

35
export const authContext = React.createContext({});
46

57
const { Provider } = authContext;
68

79
const AuthProvider = ({ children }) => {
8-
const [token, setToken] = useState(null);
10+
const [googleToken, setGoogleToken] = useState();
11+
const [jwtToken, setJwtTokenState] = useState(Cookies.get("jwt") || null);
12+
const [user, setUser] = useState(Cookies.getJSON("user") || null);
913

10-
return <Provider value={{ token, setToken }}>{children}</Provider>;
14+
const setJwtToken = useCallback((token) => {
15+
setJwtTokenState(token);
16+
if (!token) {
17+
Cookies.remove("jwt");
18+
} else {
19+
Cookies.set("jwt", token);
20+
}
21+
}, []);
22+
23+
const setMe = useCallback((me) => {
24+
setUser(me);
25+
if (!me) {
26+
Cookies.remove("user");
27+
} else {
28+
Cookies.set("user", me);
29+
}
30+
}, []);
31+
32+
const loginWithGoogleToken = async (googleToken) => {
33+
const {
34+
data: { token },
35+
} = await googleLoginToApi(googleToken);
36+
const { data: me } = await getMe(token);
37+
38+
setGoogleToken(googleToken);
39+
setJwtToken(token);
40+
setMe(me);
41+
};
42+
43+
const logout = async () => {
44+
setMe(() => {
45+
setGoogleToken(null);
46+
setJwtToken(null);
47+
return null;
48+
});
49+
};
50+
51+
const isLoggedIn = googleToken && jwtToken && user;
52+
53+
return (
54+
<Provider
55+
value={{
56+
googleToken,
57+
loginWithGoogleToken,
58+
logout,
59+
jwtToken,
60+
me: user,
61+
isLoggedIn,
62+
}}
63+
>
64+
{children}
65+
</Provider>
66+
);
1167
};
1268

1369
export default AuthProvider;

UIcode/client/src/Services/auth.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@ export const getToken = () => {
66
};
77

88
export const googleLoginToApi = (token) => {
9-
return Axios.post(
10-
`${process.env.REACT_APP_API_URL}/user/gloging`,
11-
{},
9+
return Axios.post(`${process.env.REACT_APP_API_URL}/user/glogin`, {
10+
token,
11+
});
12+
};
13+
14+
export const getMe = (token) => {
15+
return Axios.get(
16+
`${process.env.REACT_APP_API_URL}/user/me`,
17+
1218
{
1319
headers: {
1420
authorization: token,
15-
"auth-user-type": 1,
1621
},
1722
}
1823
);

0 commit comments

Comments
 (0)