我想使用next-auth与电子邮件提供程序(无密码登录)登录页面,并使用MongoDB存储新用户等。至于电子邮件发送,我想使用AWS SES。
当前状态:我用create-next-app实现了一个样板版next应用程序,并安装了mongodb、next-auth和email-provider。我添加了一个lib/mongodb.js文件来连接我的数据库,并添加了一个[...nextauth.js]文件来设置下一个认证功能。我已经添加了电子邮件提供商,并使用2个验证身份设置AWS SES。
lib/mongodb.js
// This approach is taken from https://github.com/vercel/next.js/tree/canary/examples/with-mongodb
import { MongoClient } from 'mongodb';
const uri = process.env.MONGODB_URI;
const options = {
useUnifiedTopology: true,
useNewUrlParser: true,
};
let client;
let clientPromise;
if (!process.env.MONGODB_URI) {
throw new Error('Please add your Mongo URI to .env.local');
}
if (process.env.NODE_ENV === 'development') {
if (!global._mongoClientPromise) {
client = new MongoClient(uri, options);
global._mongoClientPromise = client.connect();
}
clientPromise = global._mongoClientPromise;
} else {
client = new MongoClient(uri, options);
clientPromise = client.connect();
}
export default clientPromise;
[...nextath.js]
import NextAuth from 'next-auth';
import { MongoDBAdapter } from '@next-auth/mongodb-adapter';
import EmailProvider from 'next-auth/providers/email';
import clientPromise from '../../../lib/mongodb';
const THIRTY_DAYS = 30 * 24 * 60 * 60;
const THIRTY_MINUTES = 30 * 60;
export default NextAuth({
secret: process.env.SECRET,
session: {
strategy: 'jwt',
maxAge: THIRTY_DAYS,
updateAge: THIRTY_MINUTES,
},
adapter: MongoDBAdapter(clientPromise),
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,
}),
],
});
问题:当我npm运行dev我的项目并转到默认的登录路径时,电子邮件登录表单显示的是预期的。但是当我输入一个电子邮件地址并点击“用电子邮件登录”时,什么都没有发生。我在MongoDB Atlas数据库中看到一个连接,但没有创建任何东西,也没有发送电子邮件。页面重新加载,dev-tools中的network选项卡显示302重定向。
我只是想知道哪些部分不工作,因为没有错误被抛出,我没有经验在所有。大多数教程或代码片段都使用oauth,如postgres db或prisma。但是由于我使用的是mongodb,没有oauth,所以很难找到很多源代码和解释。
我想知道:AWS SES似乎自己工作得很好,我从AWS控制台发送了一封电子邮件,我需要做的不仅仅是在. env文件中引用我的SMTP凭据并像那样导入它们吗?例如,设置节点邮件程序?它在下一个认证文档中提到,但不是强制性的,它自己的文档说,它不一定需要与SES发送简单的电子邮件。
我应该尝试不同的电子邮件发送工具,如sendgrid?我应该尝试不同的DB吗?
到目前为止,我在编程中犯的大多数错误都是非常愚蠢的,所以如果我忽略了一些显而易见的东西,我也不会感到惊讶。先谢谢你了!
1条答案
按热度按时间inb24sb21#
我也遇到过类似的问题。我无法按您的要求配置AWS SES。我必须为AWS提供一个连接字符串。
这并不奏效
是这样的
如果我在连接字符串中包含端口(25),它将无法连接。