-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathAuthContext.js
71 lines (54 loc) · 1.91 KB
/
AuthContext.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import React, { useState, useEffect, useContext } from 'react';
export const AuthContext = React.createContext();
export const useAuth = () => useContext(AuthContext);
export const AuthProvider = ({ children }) => {
const [account, setAccount] = useState(null);
const [isLoading, setIsLoading] = useState(true);
const [isAuthenticated, setIsAuthenticated] = useState(false);
const login = (postLoginRedirectUri, scopesToConsent) => {
let url = "/auth/#";
const searchParams = new URLSearchParams({});
if (postLoginRedirectUri) {
searchParams.append('postLoginRedirectUri', encodeURIComponent(postLoginRedirectUri));
}
if (scopesToConsent) {
searchParams.append('scopesToConsent', encodeURIComponent(scopesToConsent));
}
url = `${url}?${searchParams.toString()}`;
window.location.replace(url);
}
const logout = (postLogoutRedirectUri) => {
setIsAuthenticated(false);
setAccount(null);
let url = "/auth/logout";
const searchParams = new URLSearchParams({});
if (postLogoutRedirectUri) {
searchParams.append('postLoginRedirectUri', encodeURIComponent(postLogoutRedirectUri));
}
url = `${url}?${searchParams.toString()}`;
window.location.replace(url);
}
const getAccount = async () => {
const response = await fetch('/auth/account');
const data = await response.json();
setIsAuthenticated(data ? true : false);
setAccount(data);
setIsLoading(false);
}
useEffect(() => {
getAccount();
}, [])
return (
<AuthContext.Provider
value={{
account,
isLoading,
isAuthenticated,
login,
logout,
}}
>
{children}
</AuthContext.Provider>
);
};