簡體   English   中英

Next-auth、MongoDB 和 AWS SES 無法正常工作

[英]Next-auth, MongoDB and AWS SES not working properly

我想將 next-auth 與 email 提供商(無密碼登錄)一起用於登錄頁面,並使用 MongoDB 來存儲新用戶等。至於 email 發送,我想使用 AWS SES。

當前狀態:我已經使用 create-next-app 實現了樣板 next app,並安裝了 mongodb、next-auth 和電子郵件提供商。 我添加了一個 lib/mongodb.js 文件來連接到我的數據庫,並添加了一個 [...nextauth.js] 文件來設置 next-auth 功能。 我已經添加了 email 提供商,還使用 2 個經過驗證的身份設置了 AWS SES。

庫/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 運行開發我的項目和 go 到默認 sigin 路徑時,電子郵件登錄表單按預期顯示。 但是當我輸入 email 地址並單擊“使用電子郵件登錄”時,沒有任何反應。 我在我的 MongoDB Atlas 數據庫中看到一個連接,但沒有創建任何內容,也沒有發送任何 email。 頁面重新加載,開發工具中的 .network 選項卡顯示 302 重定向。

在此處輸入圖像描述

我只想知道哪些部分不起作用,因為不會拋出任何錯誤,而且我一點經驗都沒有。 大多數教程或代碼片段使用 oauth 作為 postgres db 或 prisma。 但是由於我使用的是 mongodb 而不是 oauth ,所以很難找到很多源代碼和解釋。

我想知道:AWS SES 本身似乎運行良好,我從 AWS 控制台發送了一個 email,除了在 .env 文件中引用我的 SMTP 憑據並像這樣導入它們之外,我還需要做更多的事情嗎? 例如設置 nodemailer? 它在 next-auth 文檔中提到但不是強制性的,它自己的文檔說它不一定需要使用 SES 進行簡單的 email 發送。

我是否可以嘗試使用不同的 email 發送工具,例如 sendgrid? 我應該嘗試不同的數據庫嗎?

到目前為止,我在編程中犯的大多數錯誤都非常愚蠢,所以如果我在這里忽略了一些明顯的東西,我也不會感到驚訝。 提前致謝!

我有一個類似的問題。 我無法像您那樣配置 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),它將無法連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM