首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Next-Auth EmailProvider和FaunaAdapter“无法登录”

Next-Auth EmailProvider和FaunaAdapter“无法登录”
EN

Stack Overflow用户
提问于 2022-03-13 22:37:18
回答 1查看 374关注 0票数 0

我跟踪了下一个-auth文档,将它的EmailProvider和FaunaAdapter连接到一个全新的Next.js项目中,但我无法登录。

我的依赖关系:

代码语言:javascript
复制
"@next-auth/fauna-adapter": "^1.0.2"
"faunadb": "^4.5.2"
"next": "^12.1.0"
"next-auth": "^4.2.1"
"nodemailer": "^6.7.2"
"react": "^17.0.2"
"react-dom": "^17.0.2"

我已经用SessionProvider包装了我的SessionProvider,所以我可以在pages/index.jsx中使用useSession()

真正的工作发生在回购程序中唯一的其他文件pages/api/auth/[...nextauth].js中。

代码语言:javascript
复制
import NextAuth from 'next-auth';
import EmailProvider from 'next-auth/providers/email'
import { Client as FaunaClient } from 'faunadb';
import { FaunaAdapter } from '@next-auth/fauna-adapter';


const client = new FaunaClient({
  secret: process.env.FAUNA_CLIENT_SECRET,
  scheme: 'https',
  domain: 'db.fauna.com',
  port: 443,
});

export default NextAuth({
  providers: [
    EmailProvider({
      server: {
        host: process.env.EMAIL_SERVER_HOST,
        port: process.env.EMAIL_SERVER_PORT,
        auth: {
          user: process.env.EMAIL_SERVER_USER,
          pass: process.env.EMAIL_SERVER_PASSWORD
        }
      },
      from: process.env.EMAIL_FROM,
      maxAge: 10 * 60 * 60,
    }),
  ],
  adapter: FaunaAdapter(client),
  secret: process.env.AUTH_SECRET,
});

问题

当我尝试登录时,我成功地收到了收件箱中的电子邮件,并且Fauna仪表板在verification_tokens集合中显示了一个新条目。新令牌中的expires属性未来为10小时,而identifier是正确的电子邮件地址。

但是,当我单击电子邮件中的链接时,我被重定向到http://localhost:3000/api/auth/error?error=Verification,我看到消息“无法登录。登录链接不再有效。它可能已经被使用,或者已经过期。”

在Fauna仪表板中,userssessions集合都是空的。

我正在使用邮戳处理SMTP电子邮件-我很好奇它是否可以在发送电子邮件时预先单击链接?

Gmail是接收邮件的客户端,但我怀疑它是预先点击链接吗?

我的本地节点版本是16.14.0,为了消除并发症,我已经从纱线恢复到npm。这里有一个演示存储库:https://github.com/tatwater/nextauth-fauna

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2022-04-10 14:28:28

所以,我看得更清楚了,我发现适配器是按照这个特定的顺序调用动物群Match(Index('verification_token_by_identifier_and_token'), [identifier, token]),而索引期望以相反的方式接收[token, identifier]的术语。

看起来,当通过Fauna创建索引时,它总是以“错误”的方式设置术语。临时解决方案是删除索引并手动重新创建它,将标识符设置为第一个项,令牌设置为第二个项。

更持久的解决方案可能是更新适配器,使其使用索引的方式与从Shell创建索引的方式相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71461405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档