【问题标题】:Next-auth, MongoDB and AWS SES not working properlyNext-auth、MongoDB 和 AWS SES 无法正常工作
【发布时间】:2022-02-18 06:11:32
【问题描述】:

我想将 next-auth 与电子邮件提供商(无密码登录)一起用于登录页面,并使用 MongoDB 存储新用户等。至于电子邮件发送,我想使用 AWS SES。

当前状态: 我已经使用 create-next-app 实现了样板下一个应用程序,并安装了 mongodb、next-auth 和电子邮件提供程序。我添加了一个 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;

[...nextauth.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 run dev 我的项目并转到默认的 sigin 路径时,电子邮件登录表单按预期显示。但是当我输入一个电子邮件地址并单击“使用电子邮件登录”时,什么也没有发生。我在我的 MongoDB Atlas 数据库中看到了一个连接,但没有创建任何内容,也没有发送任何电子邮件。页面重新加载,开发工具中的网络选项卡显示 302 重定向。

我只想知道哪些部分不起作用,因为不会引发错误,而且我根本没有经验。大多数教程或代码 sn-ps 要么使用 oauth,如 postgres db 或 prisma。但是由于我使用的是mongodb并且没有oauth,所以很难找到很多源代码和解释。

我想知道: AWS SES 本身似乎运行良好,我从 AWS 控制台发送了一封电子邮件,我需要做的不仅仅是在 .env 文件中引用我的 SMTP 凭证并像这样导入它们吗?例如设置 nodemailer?在 next-auth 文档中提到了它,但不是强制性的,它自己的文档说它不一定需要使用 SES 发送简单的电子邮件。

我是否可以尝试其他电子邮件发送工具,例如 sendgrid? 我应该尝试不同的数据库吗?

到目前为止,我在编程中犯的大多数错误都非常愚蠢,所以如果我在这里忽略了一些明显的东西,我也不会感到惊讶。提前致谢!

【问题讨论】:

    标签: mongodb amazon-web-services next.js nodemailer next-auth


    【解决方案1】:

    我遇到了类似的问题。我无法按照您的方式配置 AWS SES。我必须为 AWS 提供一个连接字符串。

    这没用

        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,
        }),
    

    这样做了

        EmailProvider({
          server: `smtp://${process.env.EMAIL_SERVER_USER}:${process.env.EMAIL_SERVER_PASSWORD}@${process.env.EMAIL_SERVER_HOST}`,
          from: process.env.EMAIL_FROM,
        }),
    

    如果我在该连接字符串中包含端口 (25),它将无法连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 2018-03-10
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多