nextauthz 1.3.36 → 1.3.37
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 +27 -18
- package/dist/index.mjs +27 -18
- package/package.json +1 -1
- package/src/AuthProvider.tsx +31 -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,21 @@ 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
|
-
|
|
94
|
-
setRole(extractRole(parsed));
|
|
96
|
+
setUser(user);
|
|
97
|
+
setRole(extractRole(user));
|
|
95
98
|
} catch {
|
|
96
99
|
resetAuth();
|
|
97
100
|
}
|
|
@@ -100,26 +103,28 @@ function createAuthContext(option) {
|
|
|
100
103
|
resetAuth();
|
|
101
104
|
}
|
|
102
105
|
setAuthChecked(true);
|
|
103
|
-
}, [tokenKey]);
|
|
106
|
+
}, [tokenKey, manager, user, setAuth, setAuthChecked, setUser, setRole, resetAuth, extractRole]);
|
|
104
107
|
const login = (0, import_react.useCallback)(
|
|
105
|
-
(tokens, userData
|
|
108
|
+
(tokens, userData) => {
|
|
106
109
|
const tokenValue = tokens[tokenKey] ?? tokens["access_token"] ?? Object.values(tokens)[0];
|
|
107
110
|
manager.setTokens({
|
|
108
111
|
...tokens,
|
|
109
112
|
[tokenKey]: tokenValue,
|
|
110
113
|
user: JSON.stringify(userData ?? null)
|
|
111
114
|
});
|
|
112
|
-
if (userData)
|
|
113
|
-
|
|
115
|
+
if (userData) {
|
|
116
|
+
setUser(userData);
|
|
117
|
+
setRole(extractRole(userData));
|
|
118
|
+
}
|
|
114
119
|
setAuth(true);
|
|
115
120
|
setAuthChecked(true);
|
|
116
121
|
},
|
|
117
|
-
[tokenKey]
|
|
122
|
+
[tokenKey, manager, setUser, setRole, extractRole, setAuth, setAuthChecked]
|
|
118
123
|
);
|
|
119
124
|
const logout = (0, import_react.useCallback)(() => {
|
|
120
125
|
manager.clearTokens();
|
|
121
126
|
resetAuth();
|
|
122
|
-
}, []);
|
|
127
|
+
}, [manager, resetAuth]);
|
|
123
128
|
const value = (0, import_react.useMemo)(
|
|
124
129
|
() => ({
|
|
125
130
|
user,
|
|
@@ -128,10 +133,13 @@ function createAuthContext(option) {
|
|
|
128
133
|
isAuthChecked,
|
|
129
134
|
login,
|
|
130
135
|
logout,
|
|
131
|
-
setUser
|
|
136
|
+
setUser: (u) => {
|
|
137
|
+
setUser(u);
|
|
138
|
+
setRole(extractRole(u));
|
|
139
|
+
},
|
|
132
140
|
tokenKey
|
|
133
141
|
}),
|
|
134
|
-
[user, role, isAuthenticated, isAuthChecked, login, logout, tokenKey]
|
|
142
|
+
[user, role, isAuthenticated, isAuthChecked, login, logout, setUser, tokenKey, extractRole]
|
|
135
143
|
);
|
|
136
144
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthContext.Provider, { value, children });
|
|
137
145
|
};
|
|
@@ -190,6 +198,7 @@ var RoleGuard = ({
|
|
|
190
198
|
if (!isAuthChecked) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children: fallback });
|
|
191
199
|
if (!isAuthenticated) return null;
|
|
192
200
|
if (!role || !allowedRoles.includes(role)) return null;
|
|
201
|
+
console.log(role);
|
|
193
202
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
|
|
194
203
|
};
|
|
195
204
|
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,21 @@ 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
|
-
|
|
73
|
-
setRole(extractRole(parsed));
|
|
75
|
+
setUser(user);
|
|
76
|
+
setRole(extractRole(user));
|
|
74
77
|
} catch {
|
|
75
78
|
resetAuth();
|
|
76
79
|
}
|
|
@@ -79,26 +82,28 @@ function createAuthContext(option) {
|
|
|
79
82
|
resetAuth();
|
|
80
83
|
}
|
|
81
84
|
setAuthChecked(true);
|
|
82
|
-
}, [tokenKey]);
|
|
85
|
+
}, [tokenKey, manager, user, setAuth, setAuthChecked, setUser, setRole, resetAuth, extractRole]);
|
|
83
86
|
const login = useCallback(
|
|
84
|
-
(tokens, userData
|
|
87
|
+
(tokens, userData) => {
|
|
85
88
|
const tokenValue = tokens[tokenKey] ?? tokens["access_token"] ?? Object.values(tokens)[0];
|
|
86
89
|
manager.setTokens({
|
|
87
90
|
...tokens,
|
|
88
91
|
[tokenKey]: tokenValue,
|
|
89
92
|
user: JSON.stringify(userData ?? null)
|
|
90
93
|
});
|
|
91
|
-
if (userData)
|
|
92
|
-
|
|
94
|
+
if (userData) {
|
|
95
|
+
setUser(userData);
|
|
96
|
+
setRole(extractRole(userData));
|
|
97
|
+
}
|
|
93
98
|
setAuth(true);
|
|
94
99
|
setAuthChecked(true);
|
|
95
100
|
},
|
|
96
|
-
[tokenKey]
|
|
101
|
+
[tokenKey, manager, setUser, setRole, extractRole, setAuth, setAuthChecked]
|
|
97
102
|
);
|
|
98
103
|
const logout = useCallback(() => {
|
|
99
104
|
manager.clearTokens();
|
|
100
105
|
resetAuth();
|
|
101
|
-
}, []);
|
|
106
|
+
}, [manager, resetAuth]);
|
|
102
107
|
const value = useMemo(
|
|
103
108
|
() => ({
|
|
104
109
|
user,
|
|
@@ -107,10 +112,13 @@ function createAuthContext(option) {
|
|
|
107
112
|
isAuthChecked,
|
|
108
113
|
login,
|
|
109
114
|
logout,
|
|
110
|
-
setUser
|
|
115
|
+
setUser: (u) => {
|
|
116
|
+
setUser(u);
|
|
117
|
+
setRole(extractRole(u));
|
|
118
|
+
},
|
|
111
119
|
tokenKey
|
|
112
120
|
}),
|
|
113
|
-
[user, role, isAuthenticated, isAuthChecked, login, logout, tokenKey]
|
|
121
|
+
[user, role, isAuthenticated, isAuthChecked, login, logout, setUser, tokenKey, extractRole]
|
|
114
122
|
);
|
|
115
123
|
return /* @__PURE__ */ jsx(AuthContext.Provider, { value, children });
|
|
116
124
|
};
|
|
@@ -169,6 +177,7 @@ var RoleGuard = ({
|
|
|
169
177
|
if (!isAuthChecked) return /* @__PURE__ */ jsx3(Fragment2, { children: fallback });
|
|
170
178
|
if (!isAuthenticated) return null;
|
|
171
179
|
if (!role || !allowedRoles.includes(role)) return null;
|
|
180
|
+
console.log(role);
|
|
172
181
|
return /* @__PURE__ */ jsx3(Fragment2, { children });
|
|
173
182
|
};
|
|
174
183
|
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,26 @@ 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
|
-
setRole(extractRole(parsed))
|
|
75
|
+
setUser(user) // ensure user is set in store
|
|
76
|
+
setRole(extractRole(user)) // set role automatically
|
|
73
77
|
} catch {
|
|
74
78
|
resetAuth()
|
|
75
79
|
}
|
|
@@ -79,10 +83,11 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
79
83
|
}
|
|
80
84
|
|
|
81
85
|
setAuthChecked(true)
|
|
82
|
-
}, [tokenKey])
|
|
86
|
+
}, [tokenKey, manager, user, setAuth, setAuthChecked, setUser, setRole, resetAuth, extractRole])
|
|
83
87
|
|
|
88
|
+
// ✅ Login function
|
|
84
89
|
const login = useCallback(
|
|
85
|
-
(tokens: Record<string, string>, userData?: UserType
|
|
90
|
+
(tokens: Record<string, string>, userData?: UserType) => {
|
|
86
91
|
const tokenValue =
|
|
87
92
|
tokens[tokenKey] ?? tokens['access_token'] ?? Object.values(tokens)[0]
|
|
88
93
|
|
|
@@ -92,18 +97,21 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
92
97
|
user: JSON.stringify(userData ?? null),
|
|
93
98
|
})
|
|
94
99
|
|
|
95
|
-
if (userData)
|
|
96
|
-
|
|
100
|
+
if (userData) {
|
|
101
|
+
setUser(userData)
|
|
102
|
+
setRole(extractRole(userData)) // set role whenever user is logged in
|
|
103
|
+
}
|
|
104
|
+
|
|
97
105
|
setAuth(true)
|
|
98
106
|
setAuthChecked(true)
|
|
99
107
|
},
|
|
100
|
-
[tokenKey]
|
|
108
|
+
[tokenKey, manager, setUser, setRole, extractRole, setAuth, setAuthChecked]
|
|
101
109
|
)
|
|
102
110
|
|
|
103
111
|
const logout = useCallback(() => {
|
|
104
112
|
manager.clearTokens()
|
|
105
113
|
resetAuth()
|
|
106
|
-
}, [])
|
|
114
|
+
}, [manager, resetAuth])
|
|
107
115
|
|
|
108
116
|
// ✅ MEMOIZED CONTEXT VALUE
|
|
109
117
|
const value = useMemo(
|
|
@@ -114,10 +122,13 @@ export function createAuthContext<UserType extends User = User>(option?: {
|
|
|
114
122
|
isAuthChecked,
|
|
115
123
|
login,
|
|
116
124
|
logout,
|
|
117
|
-
setUser
|
|
125
|
+
setUser: (u: UserType | null) => {
|
|
126
|
+
setUser(u)
|
|
127
|
+
setRole(extractRole(u))
|
|
128
|
+
},
|
|
118
129
|
tokenKey,
|
|
119
130
|
}),
|
|
120
|
-
[user, role, isAuthenticated, isAuthChecked, login, logout, tokenKey]
|
|
131
|
+
[user, role, isAuthenticated, isAuthChecked, login, logout, setUser, tokenKey, extractRole]
|
|
121
132
|
)
|
|
122
133
|
|
|
123
134
|
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>
|