-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmiddleware.ts
More file actions
68 lines (57 loc) · 1.33 KB
/
middleware.ts
File metadata and controls
68 lines (57 loc) · 1.33 KB
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
import {withAuth} from "next-auth/middleware"
import {NextResponse} from "next/server"
import {UserRole} from "./models/User"
export default withAuth(
function middleware(req) {
const path = req.nextUrl.pathname
const token = req.nextauth.token
if (isOnlyForUnauthorized(path) && token !== null) {
return NextResponse.redirect(new URL("/", req.url))
}
},
{
callbacks: {
authorized: ({token, req}) => {
const path = req.nextUrl.pathname
if (isOnlyForUnauthorized(path)) {
return true
}
if (token === null) {
return false
}
if (isOnlyForAuthorized(path)) {
return true
}
if (isOnlyForAdmin(path)) {
return token.userData.role === UserRole.ADMIN
}
return token.userData.role !== UserRole.USER
},
},
}
)
const isOnlyForUnauthorized = (path: string) => {
return path.startsWith("/auth")
}
const isOnlyForAuthorized = (path: string) => {
return path.startsWith("/user")
}
const isOnlyForAdmin = (path: string) => {
return path === "/tos/edit" || path === "/admin"
}
export const config = {
matcher: [
"/add",
"/edit/:id*",
"/auth/signIn",
"/auth/signUp",
"/auth/signUp/activate",
"/auth/signUp/activate/:hash*",
"/tos/edit",
"/admin",
"/user",
"/user/signout",
],
runtime: "experimental-edge",
unstable_allowDynamic: ["/node_modules/mongoose/**"],
}