使用 next-auth 中间件防止经过身份验证的用户访问自定义登录页面

2023-11-26

我们目前正在使用 NextJS 13 开发一个应用程序next-auth,到目前为止一切都很好。我们的应用程序使用自定义登录页面CredentialsProvider我们使用 next-auth 中间件来保护我们的路由。我们希望阻止我们的用户访问/login如果他们已经通过身份验证。我们成功地在客户端实现了这一点useSession()但我们正在寻找一种方法来在中间件中使用这种逻辑。以目前的水平可以实现吗next-auth中间件实现?以下是我们当前的中间件和路由配置。谢谢。

//middleware.ts
import withAuth from 'next-auth/middleware';

export default withAuth({
  pages: {
    signIn: `/login`,
  },
});

and

//route.ts
import NextAuth from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';

const handler = NextAuth({
  pages: {
    signIn: `/login`,
  },
  session: {
    strategy: 'jwt',
  },
  providers: [
    CredentialsProvider({
      name: 'Credentials',
      credentials: {
        username: { label: 'Username', type: 'text' },
        password: { label: 'Password', type: 'password' },
      },
      async authorize(credentials, req) {
        //auth logic here
      },
    }),
  ],
});

export { handler as GET, handler as POST };

这对我们有用。也归功于@Yilmaz,这是基于他的回答。

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('/dashboard', req.url));
  }

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

  // @ts-expect-error
  return authMiddleware(req, event);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 next-auth 中间件防止经过身份验证的用户访问自定义登录页面 的相关文章

随机推荐

  • 如何找到两个数据库之间的差异? [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在尝试将更改从数据库复制到数据库 但是我不知道这些更改到底是什么 是否有一个 SQL 脚本可以查找数据库之间不同的对象 然后生成一个脚本来更新 DatabaseB 以匹配 DatabaseA
  • 如何读取 UISlider 拇指图像的大小

    我试图在 UISlider 中的拇指上方居中放置一个额外的 UIView 为此 我需要拇指图像的宽度 在 iOS6 中 这工作得很好 我可以用 CGFloat thumbWidth self navSlider currentThumbIm
  • Java:如何确定正则表达式模式匹配失败的原因?

    我正在使用正则表达式来匹配模式是否匹配 但我也想知道它何时失败 例如 假设我有一个模式 N 1 3 Y 我将它与字符串 NNNNY 进行匹配 我想知道失败是因为N太多了 或者 如果我将其与字符串 XNNY 进行匹配 我想知道它失败是因为字符
  • 如何正确地在单词前面加上“a”和“an”?

    我有一个 NET 应用程序 给定一个名词 我希望它正确地为该单词添加 a 或 an 前缀 我该怎么做呢 在您认为答案是简单地检查第一个字母是否是元音之前 请考虑以下短语 一个诚实的错误 一辆二手车 下载维基百科 解压缩它并编写一个快速过滤程
  • 将base64图像数据转换为angularjs中的图像文件

    在 AngularJS 中将 Base64 文件转换为图像时文件损坏 任何人都可以建议我如何在 AngularJS 中将 Base64 文件转换为图像 我正在使用这种方法将base64文件转换为图像 var imageBase64 imag
  • 如何分割一个大的 xml 文件?

    我们将 记录 导出到 xml 文件 我们的一位客户抱怨该文件太大 他们的其他系统无法处理 因此 我需要拆分文件 同时在每个新文件中重复 标题部分 因此 我正在寻找一些东西 可以让我为应该始终输出的部分定义一些 xpath 并为 行 定义另一
  • 暂停,恢复时给出上次暂停的值

    我有一个热Observable由套接字供电 我可以使用pausable暂停套接字馈送 但是 一旦我 取消暂停 可观察对象 我需要显示在订阅暂停时套接字可能发送的最后一个值 我不想跟踪套接字手动发送的最后一个值 这怎么可能暂停 从文档中的示例
  • CBPeripheralManager startAdvertising 无法在 OS X yosemite 上运行

    使用您的 mac 运行 OS X 10 10 yosemite DP 6 作为 iBeacon 时有人注意到任何问题吗 我尝试了几种工具 也自己开发了它 使用 CBPeripheralManager startAdvertising 但没有
  • React-native-video 播放 Vimeo 和 YouTube

    我想知道是否可以通过 React Native 组件react native video 播放 Vimeo 和 YouTube 到目前为止 我的研究表明这几乎是不可能的 因为react native video需要直接引用文件 或流 而这些
  • 如何在 Delphi 中使用或解决视觉表单继承问题?

    我一直在 Delphi 7 中从事一个项目 我想让表单从其他表单继承组件 我能够完成这项工作 但遇到了以下问题 我将发布解决方案 希望将来能帮助其他人 在表单的 pas 文件中 我会将表单更改为从其他表单继承 但它不会从祖先表单获取组件 对
  • 如何转义任意字符串以用作 Windows 中的命令行参数?

    我有一个字符串列表 我想在单个 Windows 命令行调用中将这些字符串作为参数传递 对于简单的字母数字字符串 只需逐字传递它们就足够了 gt script pl foo bar baz yes no foo bar baz yes no
  • iPhone中的核心数据默认使用哪种持久存储

    我正在我的应用程序中创建多个持久存储 但我仅使用一个持久存储协调器和托管对象模型 现在我的问题是 当我在托管对象上下文上调用 save 方法时 它将使用哪个持久存储来保存对象 所以我想指定用于保存对象的持久存储 同样 在从数据库中获取对象时
  • 为什么Python中的对象不能添加属性? [复制]

    这个问题在这里已经有答案了 用Python shell编写 gt gt gt o object gt gt gt o test 1 Traceback most recent call last File
  • 向控制器提交多次调用的相同 Partial View 数据?

    我在我的视图中添加了一个按钮 单击此按钮后 将添加部分视图 在我的表单中 我可以添加尽可能多的部分视图 提交此表单数据时 我无法将所有部分视图数据发送到控制器 我制作了一个具有所有属性的不同模型 并且我已将该模型的列表添加到我的主模型中 谁
  • 在 C# 中实现方法装饰器

    In python是可以实施的function decorators扩展函数和方法的行为 特别是我正在迁移设备库python to C 与设备的通信可能会生成错误 应通过自定义异常重新引发错误 In python我会这样写 device e
  • 双倍到常量字符*

    如何将 double 转换为 const char 然后将其转换回 double 我想将双精度数转换为字符串 通过 fputs 将其写入文件 然后当我读取文件时 需要将其转换回双精度数 我正在使用 Visual C 2010 Express
  • 从 C 语言在 64 位汇编函数中传递参数。哪个寄存器接收这些参数?

    我想将参数从 C 传递给汇编函数 在类 UNIX 系统上 前六个参数为 rdi rsi rdx rcx r8 和 r9 在 Windows 上 前四个参数为 rcx rdx r8 和 r9 现在 我的问题是 在 BIOS 或 DOS 编程级
  • Opengl ES 2.0:获取纹理大小和其他信息

    问题的背景是Android环境中的OpenGL ES 2 0 我有质感 显示或使用都没有问题 有没有一种方法可以简单地从其绑定 ID 开始了解其宽度和高度以及其他信息 如内部格式 我需要在不知道纹理大小的情况下将纹理保存到位图 ES 2 0
  • javascript onbeforeunload 检测刷新或关闭

    使用以下函数可以检测用户拥有哪个按钮 按下刷新按钮或关闭按钮 如果没有还有其他办法吗 window bind beforeunload function event return pls save ur work 简单的答案是否定的 浏览器
  • 使用 next-auth 中间件防止经过身份验证的用户访问自定义登录页面

    我们目前正在使用 NextJS 13 开发一个应用程序next auth 到目前为止一切都很好 我们的应用程序使用自定义登录页面CredentialsProvider我们使用 next auth 中间件来保护我们的路由 我们希望阻止我们的用