我跟踪了下一个-auth文档,将它的EmailProvider和FaunaAdapter连接到一个全新的Next.js项目中,但我无法登录。
我的依赖关系:
"@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中。
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仪表板中,users和sessions集合都是空的。
我正在使用邮戳处理SMTP电子邮件-我很好奇它是否可以在发送电子邮件时预先单击链接?
Gmail是接收邮件的客户端,但我怀疑它是预先点击链接吗?
我的本地节点版本是16.14.0,为了消除并发症,我已经从纱线恢复到npm。这里有一个演示存储库:https://github.com/tatwater/nextauth-fauna
谢谢你的帮助!
发布于 2022-04-10 14:28:28
所以,我看得更清楚了,我发现适配器是按照这个特定的顺序调用动物群Match(Index('verification_token_by_identifier_and_token'), [identifier, token]),而索引期望以相反的方式接收[token, identifier]的术语。
看起来,当通过Fauna创建索引时,它总是以“错误”的方式设置术语。临时解决方案是删除索引并手动重新创建它,将标识符设置为第一个项,令牌设置为第二个项。

更持久的解决方案可能是更新适配器,使其使用索引的方式与从Shell创建索引的方式相同。
https://stackoverflow.com/questions/71461405
复制相似问题