nextauthz 1.3.36 → 1.3.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +28 -18
- package/dist/index.mjs +28 -18
- package/package.json +1 -1
- package/src/AuthProvider.tsx +33 -20
- package/src/RoleGuard.tsx +3 -0
package/dist/index.d.mts
CHANGED
|
@@ -10,7 +10,7 @@ type AuthContextType<UserType extends User = User> = {
|
|
|
10
10
|
role: string | null;
|
|
11
11
|
isAuthenticated: boolean;
|
|
12
12
|
isAuthChecked: boolean;
|
|
13
|
-
login: (tokens: Record<string, string>, userData?: UserType
|
|
13
|
+
login: (tokens: Record<string, string>, userData?: UserType) => void;
|
|
14
14
|
logout: () => void;
|
|
15
15
|
setUser: (user: UserType | null) => void;
|
|
16
16
|
tokenKey: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ type AuthContextType<UserType extends User = User> = {
|
|
|
10
10
|
role: string | null;
|
|
11
11
|
isAuthenticated: boolean;
|
|
12
12
|
isAuthChecked: boolean;
|
|
13
|
-
login: (tokens: Record<string, string>, userData?: UserType
|
|
13
|
+
login: (tokens: Record<string, string>, userData?: UserType) => void;
|
|
14
14
|
logout: () => void;
|
|
15
15
|
setUser: (user: UserType | null) => void;
|
|
16
16
|
tokenKey: string;
|
package/dist/index.js
CHANGED
|
@@ -60,7 +60,9 @@ var useAuthStore = (0, import_zustand.create)((set) => ({
|
|
|
60
60
|
// src/AuthProvider.tsx
|
|
61
61
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
62
62
|
function createAuthContext(option) {
|
|
63
|
-
const AuthContext = (0, import_react.createContext)(
|
|
63
|
+
const AuthContext = (0, import_react.createContext)(
|
|
64
|
+
void 0
|
|
65
|
+
);
|
|
64
66
|
const AuthProvider = ({ children }) => {
|
|
65
67
|
const storage = option?.storage ?? "cookie";
|
|
66
68
|
const tokenKey = option?.tokenKey ?? "access_token";
|
|
@@ -78,20 +80,22 @@ function createAuthContext(option) {
|
|
|
78
80
|
(0, import_react.useEffect)(() => {
|
|
79
81
|
(0, import_react_token_manager.configureTokenManager)({ storage });
|
|
80
82
|
}, [storage]);
|
|
81
|
-
const extractRole = (
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
const extractRole = (0, import_react.useCallback)(
|
|
84
|
+
(userObj) => {
|
|
85
|
+
if (!userObj) return null;
|
|
86
|
+
return rolePath.split(".").reduce((acc, key) => acc?.[key], userObj) ?? null;
|
|
87
|
+
},
|
|
88
|
+
[rolePath]
|
|
89
|
+
);
|
|
85
90
|
(0, import_react.useEffect)(() => {
|
|
86
|
-
const storedUser = manager.getSingleToken("user");
|
|
87
91
|
const token = manager.getSingleToken(tokenKey);
|
|
88
92
|
if (token && !manager.isExpired(token)) {
|
|
89
93
|
setAuth(true);
|
|
90
|
-
if (
|
|
94
|
+
if (user) {
|
|
91
95
|
try {
|
|
92
|
-
|
|
93
|
-
setUser(
|
|
94
|
-
setRole(extractRole(
|
|
96
|
+
console.log("user", user);
|
|
97
|
+
setUser(user);
|
|
98
|
+
setRole(extractRole(user));
|
|
95
99
|
} catch {
|
|
96
100
|
resetAuth();
|
|
97
101
|
}
|
|
@@ -100,26 +104,28 @@ function createAuthContext(option) {
|
|
|
100
104
|
resetAuth();
|
|
101
105
|
}
|
|
102
106
|
setAuthChecked(true);
|
|
103
|
-
}, [tokenKey]);
|
|
107
|
+
}, [tokenKey, manager, user, setAuth, setAuthChecked, setUser, setRole, resetAuth, extractRole]);
|
|
104
108
|
const login = (0, import_react.useCallback)(
|
|
105
|
-
(tokens, userData
|
|
109
|
+
(tokens, userData) => {
|
|
106
110
|
const tokenValue = tokens[tokenKey] ?? tokens["access_token"] ?? Object.values(tokens)[0];
|
|
107
111
|
manager.setTokens({
|
|
108
112
|
...tokens,
|
|
109
113
|
[tokenKey]: tokenValue,
|
|
110
114
|
user: JSON.stringify(userData ?? null)
|
|
111
115
|
});
|
|
112
|
-
if (userData)
|
|
113
|
-
|
|
116
|
+
if (userData) {
|
|
117
|
+
setUser(userData);
|
|
118
|
+
setRole(extractRole(userData));
|
|
119
|
+
}
|
|
114
120
|
setAuth(true);
|
|
115
121
|
setAuthChecked(true);
|
|
116
122
|
},
|
|
117
|
-
[tokenKey]
|
|
123
|
+
[tokenKey, manager, setUser, setRole, extractRole, setAuth, setAuthChecked]
|
|
118
124
|
);
|
|
119
125
|
const logout = (0, import_react.useCallback)(() => {
|
|
120
126
|
manager.clearTokens();
|
|
121
127
|
resetAuth();
|
|
122
|
-
}, []);
|
|
128
|
+
}, [manager, resetAuth]);
|
|
123
129
|
const value = (0, import_react.useMemo)(
|
|
124
130
|
() => ({
|
|
125
131
|
user,
|
|
@@ -128,10 +134,13 @@ function createAuthContext(option) {
|
|
|
128
134
|
isAuthChecked,
|
|
129
135
|
login,
|
|
130
136
|
logout,
|
|
131
|
-
setUser
|
|
137
|
+
setUser: (u) => {
|
|
138
|
+
setUser(u);
|
|
139
|
+
setRole(extractRole(u));
|
|
140
|
+
},
|
|
132
141
|
tokenKey
|
|
133
142
|
}),
|
|
134
|
-
[user, role, isAuthenticated, isAuthChecked, login, logout, tokenKey]
|
|
143
|
+
[user, role, isAuthenticated, isAuthChecked, login, logout, setUser, tokenKey, extractRole]
|
|
135
144
|
);
|
|
136
145
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthContext.Provider, { value, children });
|
|
137
146
|
};
|
|
@@ -190,6 +199,7 @@ var RoleGuard = ({
|
|
|
190
199
|
if (!isAuthChecked) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children: fallback });
|
|
191
200
|
if (!isAuthenticated) return null;
|
|
192
201
|
if (!role || !allowedRoles.includes(role)) return null;
|
|
202
|
+
console.log(role);
|
|
193
203
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
|
|
194
204
|
};
|
|
195
205
|
var RoleGuard_default = RoleGuard;
|
package/dist/index.mjs
CHANGED
|
@@ -39,7 +39,9 @@ var useAuthStore = create((set) => ({
|
|
|
39
39
|
// src/AuthProvider.tsx
|
|
40
40
|
import { jsx } from "react/jsx-runtime";
|
|
41
41
|
function createAuthContext(option) {
|
|
42
|
-
const AuthContext = createContext(
|
|
42
|
+
const AuthContext = createContext(
|
|
43
|
+
void 0
|
|
44
|
+
);
|
|
43
45
|
const AuthProvider = ({ children }) => {
|
|
44
46
|
const storage = option?.storage ?? "cookie";
|
|
45
47
|
const tokenKey = option?.tokenKey ?? "access_token";
|
|
@@ -57,20 +59,22 @@ function createAuthContext(option) {
|
|
|
57
59
|
useEffect(() => {
|
|
58
60
|
configureTokenManager({ storage });
|
|
59
61
|
}, [storage]);
|
|
60
|
-
const extractRole = (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
const extractRole = useCallback(
|
|
63
|
+
(userObj) => {
|
|
64
|
+
if (!userObj) return null;
|
|
65
|
+
return rolePath.split(".").reduce((acc, key) => acc?.[key], userObj) ?? null;
|
|
66
|
+
},
|
|
67
|
+
[rolePath]
|
|
68
|
+
);
|
|
64
69
|
useEffect(() => {
|
|
65
|
-
const storedUser = manager.getSingleToken("user");
|
|
66
70
|
const token = manager.getSingleToken(tokenKey);
|
|
67
71
|
if (token && !manager.isExpired(token)) {
|
|
68
72
|
setAuth(true);
|
|
69
|
-
if (
|
|
73
|
+
if (user) {
|
|
70
74
|
try {
|
|
71
|
-
|
|
72
|
-
setUser(
|
|
73
|
-
setRole(extractRole(
|
|
75
|
+
console.log("user", user);
|
|
76
|
+
setUser(user);
|
|
77
|
+
setRole(extractRole(user));
|
|
74
78
|
} catch {
|
|
75
79
|
resetAuth();
|
|
76
80
|
}
|
|
@@ -79,26 +83,28 @@ function createAuthContext(option) {
|
|
|
79
83
|
resetAuth();
|
|
80
84
|
}
|
|
81
85
|
setAuthChecked(true);
|
|
82
|
-
}, [tokenKey]);
|
|
86
|
+
}, [tokenKey, manager, user, setAuth, setAuthChecked, setUser, setRole, resetAuth, extractRole]);
|
|
83
87
|
const login = useCallback(
|
|
84
|
-
(tokens, userData
|
|
88
|
+
(tokens, userData) => {
|
|
85
89
|
const tokenValue = tokens[tokenKey] ?? tokens["access_token"] ?? Object.values(tokens)[0];
|
|
86
90
|
manager.setTokens({
|
|
87
91
|
...tokens,
|
|
88
92
|
[tokenKey]: tokenValue,
|
|
89
93
|
user: JSON.stringify(userData ?? null)
|
|
90
94
|
});
|
|
91
|
-
if (userData)
|
|
92
|
-
|
|
95
|
+
if (userData) {
|
|
96
|
+
setUser(userData);
|
|
97
|
+
setRole(extractRole(userData));
|
|
98
|
+
}
|
|
93
99
|
setAuth(true);
|
|
94
100
|
setAuthChecked(true);
|
|
95
101
|
},
|
|
96
|
-
[tokenKey]
|
|
102
|
+
[tokenKey, manager, setUser, setRole, extractRole, setAuth, setAuthChecked]
|
|
97
103
|
);
|
|
98
104
|
const logout = useCallback(() => {
|
|
99
105
|
manager.clearTokens();
|
|
100
106
|
resetAuth();
|
|
101
|
-
}, []);
|
|
107
|
+
}, [manager, resetAuth]);
|
|
102
108
|
const value = useMemo(
|
|
103
109
|
() => ({
|
|
104
110
|
user,
|
|
@@ -107,10 +113,13 @@ function createAuthContext(option) {
|
|
|
107
113
|
isAuthChecked,
|
|
108
114
|
login,
|
|
109
115
|
logout,
|
|
110
|
-
setUser
|
|
116
|
+
setUser: (u) => {
|
|
117
|
+
setUser(u);
|
|
118
|
+
setRole(extractRole(u));
|
|
119
|
+
},
|
|
111
120
|
tokenKey
|
|
112
121
|
}),
|
|
113
|
-
[user, role, isAuthenticated, isAuthChecked, login, logout, tokenKey]
|
|
122
|
+
[user, role, isAuthenticated, isAuthChecked, login, logout, setUser, tokenKey, extractRole]
|
|
114
123
|
);
|
|
115
124
|
return /* @__PURE__ */ jsx(AuthContext.Provider, { value, children });
|
|
116
125
|
};
|
|
@@ -169,6 +178,7 @@ var RoleGuard = ({
|
|
|
169
178
|
if (!isAuthChecked) return /* @__PURE__ */ jsx3(Fragment2, { children: fallback });
|
|
170
179
|
if (!isAuthenticated) return null;
|
|
171
180
|
if (!role || !allowedRoles.includes(role)) return null;
|
|
181
|
+
console.log(role);
|
|
172
182
|
return /* @__PURE__ */ jsx3(Fragment2, { children });
|
|
173
183
|
};
|
|
174
184
|
var RoleGuard_default = RoleGuard;
|
package/package.json
CHANGED
package/src/AuthProvider.tsx
CHANGED
|
@@ -16,7 +16,7 @@ export type AuthContextType<UserType extends User = User> = {
|
|
|
16
16
|
role: string | null
|
|
17
17
|
isAuthenticated: boolean
|
|
18
18
|
isAuthChecked: boolean
|
|
19
|
-
login: (tokens: Record<string, string>, userData?: UserType
|
|
19
|
+
login: (tokens: Record<string, string>, userData?: UserType) => void
|
|
20
20
|
logout: () => void
|
|
21
21
|
setUser: (user: UserType | null) => void
|
|
22
22
|
tokenKey: string
|
|
@@ -27,7 +27,9 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
27
27
|
tokenKey?: string
|
|
28
28
|
rolePath?: string
|
|
29
29
|
}) {
|
|
30
|
-
const AuthContext = createContext<AuthContextType<UserType> | undefined>(
|
|
30
|
+
const AuthContext = createContext<AuthContextType<UserType> | undefined>(
|
|
31
|
+
undefined
|
|
32
|
+
)
|
|
31
33
|
|
|
32
34
|
const AuthProvider = ({ children }: { children: ReactNode }) => {
|
|
33
35
|
const storage = option?.storage ?? 'cookie'
|
|
@@ -36,7 +38,7 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
36
38
|
|
|
37
39
|
const manager = useTokenManager()
|
|
38
40
|
|
|
39
|
-
// ✅ Selectors
|
|
41
|
+
// ✅ Selectors
|
|
40
42
|
const user = useAuthStore((s) => s.user)
|
|
41
43
|
const role = useAuthStore((s) => s.role)
|
|
42
44
|
const isAuthenticated = useAuthStore((s) => s.isAuthenticated)
|
|
@@ -52,24 +54,28 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
52
54
|
configureTokenManager({ storage })
|
|
53
55
|
}, [storage])
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
// ✅ Extract role from user
|
|
58
|
+
const extractRole = useCallback(
|
|
59
|
+
(userObj: any) => {
|
|
60
|
+
if (!userObj) return null
|
|
61
|
+
return rolePath.split('.').reduce((acc: any, key: string) => acc?.[key], userObj) ?? null
|
|
62
|
+
},
|
|
63
|
+
[rolePath]
|
|
64
|
+
)
|
|
59
65
|
|
|
60
66
|
// ✅ Hydrate once
|
|
61
67
|
useEffect(() => {
|
|
62
|
-
const storedUser = manager.getSingleToken('user')
|
|
63
68
|
const token = manager.getSingleToken(tokenKey)
|
|
64
69
|
|
|
65
70
|
if (token && !manager.isExpired(token)) {
|
|
66
71
|
setAuth(true)
|
|
67
72
|
|
|
68
|
-
if (
|
|
73
|
+
if (user) {
|
|
69
74
|
try {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
console.log('user', user);
|
|
76
|
+
|
|
77
|
+
setUser(user) // ensure user is set in store
|
|
78
|
+
setRole(extractRole(user)) // set role automatically
|
|
73
79
|
} catch {
|
|
74
80
|
resetAuth()
|
|
75
81
|
}
|
|
@@ -79,10 +85,11 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
79
85
|
}
|
|
80
86
|
|
|
81
87
|
setAuthChecked(true)
|
|
82
|
-
}, [tokenKey])
|
|
88
|
+
}, [tokenKey, manager, user, setAuth, setAuthChecked, setUser, setRole, resetAuth, extractRole])
|
|
83
89
|
|
|
90
|
+
// ✅ Login function
|
|
84
91
|
const login = useCallback(
|
|
85
|
-
(tokens: Record<string, string>, userData?: UserType
|
|
92
|
+
(tokens: Record<string, string>, userData?: UserType) => {
|
|
86
93
|
const tokenValue =
|
|
87
94
|
tokens[tokenKey] ?? tokens['access_token'] ?? Object.values(tokens)[0]
|
|
88
95
|
|
|
@@ -92,18 +99,21 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
92
99
|
user: JSON.stringify(userData ?? null),
|
|
93
100
|
})
|
|
94
101
|
|
|
95
|
-
if (userData)
|
|
96
|
-
|
|
102
|
+
if (userData) {
|
|
103
|
+
setUser(userData)
|
|
104
|
+
setRole(extractRole(userData)) // set role whenever user is logged in
|
|
105
|
+
}
|
|
106
|
+
|
|
97
107
|
setAuth(true)
|
|
98
108
|
setAuthChecked(true)
|
|
99
109
|
},
|
|
100
|
-
[tokenKey]
|
|
110
|
+
[tokenKey, manager, setUser, setRole, extractRole, setAuth, setAuthChecked]
|
|
101
111
|
)
|
|
102
112
|
|
|
103
113
|
const logout = useCallback(() => {
|
|
104
114
|
manager.clearTokens()
|
|
105
115
|
resetAuth()
|
|
106
|
-
}, [])
|
|
116
|
+
}, [manager, resetAuth])
|
|
107
117
|
|
|
108
118
|
// ✅ MEMOIZED CONTEXT VALUE
|
|
109
119
|
const value = useMemo(
|
|
@@ -114,10 +124,13 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
114
124
|
isAuthChecked,
|
|
115
125
|
login,
|
|
116
126
|
logout,
|
|
117
|
-
setUser
|
|
127
|
+
setUser: (u: UserType | null) => {
|
|
128
|
+
setUser(u)
|
|
129
|
+
setRole(extractRole(u))
|
|
130
|
+
},
|
|
118
131
|
tokenKey,
|
|
119
132
|
}),
|
|
120
|
-
[user, role, isAuthenticated, isAuthChecked, login, logout, tokenKey]
|
|
133
|
+
[user, role, isAuthenticated, isAuthChecked, login, logout, setUser, tokenKey, extractRole]
|
|
121
134
|
)
|
|
122
135
|
|
|
123
136
|
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>
|