Next-Auth Middleware禁用未验证用户的注册页面

cwxwcias  于 2023-05-28  发布在  其他
关注(0)|答案(1)|浏览(126)

因此,我实现了Next-Auth,并添加了一个中间件,如果用户通过了身份验证,它将禁用/register和/login路由。但是如果用户没有经过身份验证并想要注册,他们就不能访问/register路由并被转发到/login。

import { getToken } from 'next-auth/jwt'
import { withAuth } from 'next-auth/middleware'
import { NextFetchEvent, NextRequest, NextResponse } from 'next/server'

export default async function middleware(
    req: NextRequest,
    event: NextFetchEvent
) {
    const token = await getToken({ req })
    const isAuthenticated = !!token

    if (req.nextUrl.pathname.startsWith('/login') && isAuthenticated) {
        return NextResponse.redirect(new URL('/profile', req.url))
    }

    const authMiddleware = await withAuth({
        pages: {
            signIn: `/login`,
        },
    })

    // @ts-expect-error
    return authMiddleware(req, event)
}

export const config = {
    matcher: ['/login', '/register'],
}

尝试了一些if检查的变化,并与matcher玩,但问题仍然存在。

wwtsj6pe

wwtsj6pe1#

这解决了它。

import { getToken } from 'next-auth/jwt'
import { withAuth } from 'next-auth/middleware'
import { NextFetchEvent, NextRequest, NextResponse } from 'next/server'

export default async function middleware(
    req: NextRequest,
    event: NextFetchEvent
) {
    const token = await getToken({ req })
    const isAuthenticated = !!token

    if (req.nextUrl.pathname.startsWith('/login') && isAuthenticated) {
        return NextResponse.redirect(new URL('/profile', req.url))
    }
    if (req.nextUrl.pathname.startsWith('/register') && isAuthenticated) {
        return NextResponse.redirect(new URL('/profile', req.url))
    }

    const authMiddleware = await withAuth({
        pages: {
            signIn: req.nextUrl.pathname,
        },
    })

    // @ts-expect-error
    return authMiddleware(req, event)
}

export const config = {
    matcher: ['/login', '/register'],
}

相关问题