NextAuthJs用Gmail SMTP发魔法链接时遇Missing credentials for PLAIN错误
解决NextAuth邮件登录报错:Missing credentials for "PLAIN"
问题情况
我正在学习用NextAuth实现身份认证,已配置Gmail的SMTP服务,但每次请求魔法链接时都会报错:[next-auth][error][SIGNIN_EMAIL_ERROR] Missing credentials for "PLAIN"
错误日志
[next-auth][error][SIGNIN_EMAIL_ERROR] Missing credentials for "PLAIN" { error: { message: 'Missing credentials for "PLAIN"', stack: 'Error: Missing credentials for "PLAIN"\n' + ' at SMTPConnection._formatError (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:790:19)\n' + ' at SMTPConnection.login (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:444:38)\n' + ' at C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-transport\\index.js:272:32\n' + ' at SMTPConnection.<anonymous> (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:213:17)\n' + ' at Object.onceWrapper (node:events:627:28)\n' + ' at SMTPConnection.emit (node:events:513:28)\n' + ' at SMTPConnection.emit (node:domain:489:12)\n' + ' at SMTPConnection._actionEHLO (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:1325:14)\n' + ' at SMTPConnection._processResponse (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:953:20)\n' + ' at SMTPConnection._onData (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:755:14)', name: 'Error' }, providerId: 'email', message: 'Missing credentials for "PLAIN"' }
我的auth/[...nextauth].js代码
import NextAuth from "next-auth"; import EmailProvider from "next-auth/providers/email"; import nodemailer from "nodemailer"; import { PrismaAdapter } from "@next-auth/prisma-adapter"; import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); console.log(process.env.EMAIL_SERVER_USER); console.log(process.env.EMAIL_SERVER_PASSWORD); export default NextAuth({ providers: [ EmailProvider({ server: { host: process.env.EMAIL_SERVER_HOST, port: process.env.EMAIL_SERVER_PORT, auth: { user: process.env.EMAIL_SERVER_USER, password: process.env.EMAIL_SERVER_PASSWORD, }, }, from: process.env.EMAIL_FROM, maxAge: 10 * 60, }), ], adapter: PrismaAdapter(prisma), });
解决方案
- 验证环境变量加载:先看控制台打印的
EMAIL_SERVER_USER和EMAIL_SERVER_PASSWORD是否有值。如果是undefined,检查.env.local文件配置是否正确,变量名是否完全匹配,并且重启开发服务器让环境变量生效。 - 使用Gmail应用专用密码:Gmail现在不允许直接用账号密码登录SMTP,必须开启两步验证后生成应用专用密码,替换
EMAIL_SERVER_PASSWORD的值。 - 修正端口类型:
port需要是数字类型,把代码里的port: process.env.EMAIL_SERVER_PORT改成port: Number(process.env.EMAIL_SERVER_PORT)。 - 确认Gmail SMTP参数:Gmail的SMTP服务器地址是
smtp.gmail.com,SSL端口用465,TLS端口用587,对应配置要和这个一致。
内容的提问来源于stack exchange,提问作者Jacob Mutale
相关产品推荐
相关产品推荐

