如何用next-auth中间件阻止已认证用户访问自定义登录页?
阻止已认证用户访问登录页的NextAuth中间件实现
可以通过NextAuth的中间件实现该需求,只需在withAuth配置中添加authorized回调函数,结合用户认证状态与请求路径进行判断即可。
修改后的middleware.ts代码如下:
import withAuth from 'next-auth/middleware'; export default withAuth({ pages: { signIn: `/login`, }, authorized: ({ req, token }) => { // 已认证用户访问/login时拦截 if (token && req.nextUrl.pathname === '/login') { return false; } // 其余场景遵循默认认证逻辑 return true; }, });
逻辑说明
authorized回调会在每次请求时触发,接收req(请求对象)和token(JWT令牌,对应你配置的jwt会话策略)参数。- 当
token存在(表示用户已完成认证)且请求路径为/login时,返回false,NextAuth会自动拦截该请求并跳转至默认首页(你也可通过pages配置自定义跳转目标)。 - 其他请求场景返回
true,保持原有路由保护逻辑不变。
你的route.ts配置无需修改,维持现有结构即可。
内容的提问来源于stack exchange,提问作者alexortizl
相关产品推荐
相关产品推荐

