标签: next-auth

剧作家 e2e 测试。如何使用 oauth2 或电子邮件无密码身份验证

我开始与剧作家进行端到端测试。大多数应用程序都需要进行身份验证。使用用户名/密码机制自动执行此操作非常简单。问题是我要测试的应用程序只有两种身份验证机制:Github OAuth 和电子邮件身份验证链接。具体来说,我在 NextJS 项目中使用 next-auth。

我不知道应该如何与 Playwright 进行端到端测试,我考虑过的选项是:

  • 使用模拟用户和模拟会话完全模拟身份验证,然后将会话令牌附加到测试上下文中(如官方文档中所述)
  • 创建一个 Github 用户和/或电子邮件帐户用于测试,并以某种方式真正在 playwrigth 中使用它们。

第一个选项更容易实现,但它不再是端到端测试。第二个选项看起来很难实现,我不知道是否值得推荐。我不知道是否有更智能或更标准化的方法来进行此操作。

reactjs e2e-testing next.js playwright next-auth

11
推荐指数
1
解决办法
2976
查看次数

当 NEXTAUTH_URL 不起作用时如何定义自定义基本路径?

语境

\n

我正在使用NextJS v12.0.7React v17.0.2NextAuth v4.1.0Typescript v4.3.5

\n

我想创建一个简单的身份验证系统,基于NextAuth 文档并在登录后重定向到主页,因此我在pages/api/auth名为 的文件夹中创建了一个文件[...nextauth].ts,其中包含以下代码部分:

\n
export default NextAuth({\n  providers: [\n    CredentialsProvider({\n      id: "credentials",\n      name: "Login",\n      credentials: {\n        username: { type: "email" },\n        password: { type: "password" },\n      },\n      async authorize(credentials) {\n          // [...]\n      },\n    }),\n  ],\n\n  // [...]\n\n  callbacks: {\n    // [...]\n    redirect({ url, baseUrl }) {\n      console.log("redirect - url ", url, "baseUrl ", baseUrl); // This is what I …
Run Code Online (Sandbox Code Playgroud)

next.js next-auth

11
推荐指数
1
解决办法
3万
查看次数

下一个身份验证凭据提供程序 JWT/会话回调

我在将令牌传递给会话回调时遇到一些困难。我的最终目标是将登录用户的数据发送到客户端。最初我只是发回用户的电子邮件,但现在我想将用户的用户名和姓名与电子邮件一起发送。通过遵循文档,我们必须传递 JWT 和 Session 回调,以便我们的开发人员能够访问令牌中的更多数据。目前,在我的 JWT 回调中,我能够记录用户数据,非常棒。然而,当我尝试在会话回调中记录数据时,我得到一个空的 {}。非常感谢任何提示。先感谢您。

import NextAuth from "next-auth/next";
import CredentialsProvider from "next-auth/providers/credentials";

// Helper Functions
import {
  connectToDatabase,
  comparePasswords,
} from "../../helper/HelperFunctions";

export default NextAuth({
  session: { jwt: true },
  providers: [
    CredentialsProvider({
      async authorize(credentials) {
        const client = await connectToDatabase();

        const userCollection = client.db().collection("users");

        const user = await userCollection.findOne({
          email: credentials.email,
        });

        // const userInfo = {
        //   firstName: user.firstName,
        //   lastName: user.lastName,
        //   email: user.email,
        //   userName: user.userName,
        // };

        // console.log(userInfo);

        if (!user) …
Run Code Online (Sandbox Code Playgroud)

authentication session jwt next.js next-auth

11
推荐指数
1
解决办法
1万
查看次数

如何在没有电子邮件和 emailVerified 值的情况下使用 Prisma 适配器进行 Next-Auth

我将 next-auth 与自定义提供程序和 Prisma 适配器一起使用,我只想存储值:id、名称、国家/地区、头像和性别。但是,我收到此错误:

\n
[next-auth][error][adapter_error_createUser] \nhttps://next-auth.js.org/errors#adapter_error_createuser\nInvalid `p.user.create()` invocation in\n.\\node_modules\\@next-auth\\prisma-adapter\\dist\\index.js:6:38\n\n  3 exports.PrismaAdapter = void 0;\n  4 function PrismaAdapter(p) {\n  5     return {\n\xe2\x86\x92 6         createUser: (data) => p.user.create({\n              data: {\n                name: [redacted],\n                wcaId: [redacted],\n                country: [redacted],\n                avatar: [redacted],\n                gender: [redacted],\n                email: undefined,\n                emailVerified: null\n                ~~~~~~~~~~~~~\n              }\n            })\n\nUnknown arg `emailVerified` in data.emailVerified for type UserCreateInput. Available args:\n...\n
Run Code Online (Sandbox Code Playgroud)\n

我的自定义提供程序中的配置文件对象如下所示:

\n
profile(profile) {\n    return {\n      id: profile.me.id,\n      name: profile.me.name,\n      country: profile.me.country_iso2,\n      avatar: profile.me.avatar.url,\n      gender: profile.me.gender,\n    };\n  },\n
Run Code Online (Sandbox Code Playgroud)\n

我的 Prisma 模式中的所有内容都遵循https://next-auth.js.org/adapters/prisma#setup中的示例,但用户模型除外,如下所示: …

next.js prisma next-auth

11
推荐指数
0
解决办法
1705
查看次数

[NextAuth]:如何以编程方式在后端登录用户?

我使用多个提供商,包括凭据提供商(电子邮件和密码) 在应用程序中的某个时刻,用户可以要求提供“恢复密码”电子邮件,他应该在其中获得一次性链接。在他访问链接(/api/users/quick_link?token=XXX&email)后,我检查令牌是否有效,之后我的目标是登录用户并将他重定向到他的个人资料页面。

我尝试过什么:

  1. 使用“nextauth/client”登录功能,这显然不适用于后端
  2. 检查他们如何做“电子邮件”提供商- 起始部分或多或少是相同的,但它很快开始使用内部功能,我不打算(至少现在)触及。

我没有尝试过:使用 REST API。

因为我不知道如何从另一个 api 使用它。只是等待取货吗?

回顾

简短版本:访问 /api/users/login_me_asap?myemail=xxx 后,我想登录用户并重定向他。

node.js next.js next-auth

10
推荐指数
0
解决办法
965
查看次数

在 next-auth 中制作自定义电子邮件登录页面时找不到“next-auth/react”模块

我正在制作一个带有 next-auth 的 NextJs 应用程序作为身份验证部分。使用next-auth自己的默认页面成功实现了电子邮件登录。

但现在我想要一个自定义登录页面。我按照文档进行操作,并添加 pages: { signIn: '/auth/signin' }到我的 [...nextauth].js 文件中。然后,我在pages/auth/signin.js中添加了给定的电子邮件登录代码。但在运行时,我收到此模块未找到错误:yarn dev

error - ./pages/api/auth/signin.js:1:0
Module not found: Package path ./react is not exported from package C:\...\node_modules\next-auth (see exports field in C:\...\node_modules\next-auth\package.json)
> 1 | import { getCsrfToken } from "next-auth/react"
  2 | 
  3 | export default function SignIn({ csrfToken }) {
  4 |   return (

Import trace for requested module:

https://nextjs.org/docs/messages/module-not-found
Run Code Online (Sandbox Code Playgroud)

我在 npm 或纱线网站中找不到任何名为“next-auth/react”的模块。即使在node_modules的next-auth文件夹中,也没有“react”命名文件......

我该如何解决这个问题?我在这里做错了什么吗?

npm yarnpkg next.js next-auth

10
推荐指数
3
解决办法
2万
查看次数

next-auth 中 useSession 和 getSession 的区别?

useSessiongetSession之间有什么区别next-auth?两者似乎都在返回session对象。

next.js next-auth

10
推荐指数
1
解决办法
6969
查看次数

当您更改用户数据时,如何在 nextauth 中改变用户的会话?

我想更新用户的数据,但更新用户的数据后如何使更改也出现在会话中?

[...nextauth].js

    callbacks: {
    jwt: ({ token, user }) => {
      if (user) {
        token.id = user.id;
        token.name = user.name;
        token.surname = user.surname;
        token.email = user.email;
        token.role = user.role;
      }
      // Here, check the token validity date
      if (token.tokenExpiration < Date.now()) {
        // Call the endpoint where you handle the token refresh for a user
        const user =  axios.post(
          `${process.env.API_URL}/auth/authentication/refresh`,
          {
            refreshToken: token.refreshToken,
          }
        );
        // Check for the result and update the data accordingly
        return { ...token, ...user }; …
Run Code Online (Sandbox Code Playgroud)

session next.js prisma next-auth

10
推荐指数
1
解决办法
3296
查看次数

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

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

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

export default withAuth({
  pages: {
    signIn: `/login`,
  },
});
Run Code Online (Sandbox Code Playgroud)

//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, …
Run Code Online (Sandbox Code Playgroud)

authentication middleware reactjs next.js next-auth

10
推荐指数
2
解决办法
5779
查看次数

如何将数字用户 ID 与 next-auth 一起使用

我最近发现并开始测试create-t3-app作为 NextJS 项目的新基础,因为它负责 TypeScript、trpc、prisma 和 next-auth 等的大量样板设置,因此它会为我节省大量时间时间。虽然这是相关的,但我不认为这是我的问题的根源。我的问题是,我使用带有自动递增用户 ID 的 MySQL 数据库,但包的类型似乎next-auth迫使我使用字符串(DefaultUserinnext-auth/core/types.d.tsAdapterUserinnext-auth/adapters.d.ts都将 id 类型设置为字符串,并且注释说 UUID)。考虑到我可以扩展支持数字用户 ID 的功能,我将其添加到next-auth.d.ts

import { DefaultSession, DefaultUser } from 'next-auth'

declare module 'next-auth' {
  interface User extends DefaultUser {
    id: number;
  }
  interface Session {
    user?: {
      id: number;
    } & DefaultSession['user'];
  }
}
Run Code Online (Sandbox Code Playgroud)

这似乎在大多数地方都有效,除了[...nextauth].ts给我这个错误的地方

输入“字符串|” number” 不可分配给类型“number”。类型“string”不可分配给类型“number”。ts(2322)

就在session.user.id = user.id这一段代码中

export const authOptions: NextAuthOptions = {
  // Include …
Run Code Online (Sandbox Code Playgroud)

typescript next.js next-auth

9
推荐指数
1
解决办法
1545
查看次数