[英]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.