首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Next-auth,MongoDB和AWS不能正常工作

Next-auth,MongoDB和AWS不能正常工作
EN

Stack Overflow用户
提问于 2022-01-12 09:37:32
回答 1查看 339关注 0票数 0

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

目前的状况:我已经实现了一个样板下应用程序与创建下一个应用,并安装了mongodb,next-auth和电子邮件提供商。我添加了一个lib/mongodb.js文件来连接到我的数据库,并添加了一个...nextauth.js文件来设置下一个功能。我已经添加了电子邮件供应商,并设置了两个验证身份的AWS SES。

lib/mongodb.js

代码语言:javascript
运行
复制
// 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

代码语言:javascript
运行
复制
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运行开发我的项目并转到默认的sigin路径时,电子邮件登录表单将按预期显示。但是当我输入一个电子邮件地址并点击“用电子邮件登录”时,什么都不会发生。我在我的MongoDB阿特拉斯数据库中看到了一个连接,但是没有创建任何东西,也没有发送任何电子邮件。开发工具中的页面重新加载和网络选项卡显示302重定向。

我只想知道哪一部分不工作,因为没有错误抛出,我完全没有经验。大多数教程或代码片段都使用oauth,如postgres db或prisma。但是由于我使用的是mongodb而没有oauth,所以很难找到大量的源代码和解释。

我想知道: AWS本身似乎很好,我从AWS控制台发送了一封电子邮件,我需要做的不仅仅是在.env文件中引用我的SMTP凭据并像这样导入它们吗?例如,安装nodemailer?在下一篇文档中提到了这一点,但并不是强制性的,而且它自己的文档显示,它不一定需要与SES一起发送简单的电子邮件。

我是否可以尝试另一种电子邮件发送工具,比如sendgrid?我应该换个分号吗?

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

EN

回答 1

Stack Overflow用户

发布于 2022-02-17 22:11:32

我也有过类似的问题。我无法得到AWS SES配置,因为你有它。我必须为AWS提供一个连接字符串。

这不起作用

代码语言:javascript
运行
复制
    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,
    }),

这件事

代码语言:javascript
运行
复制
    EmailProvider({
      server: `smtp://${process.env.EMAIL_SERVER_USER}:${process.env.EMAIL_SERVER_PASSWORD}@${process.env.EMAIL_SERVER_HOST}`,
      from: process.env.EMAIL_FROM,
    }),

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

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

https://stackoverflow.com/questions/70679244

复制
相关文章

相似问题

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