PayloadCMS发送验证邮件报错:TypeError: req.get is not a function 求助
PayloadCMS 邮件验证报错:TypeError: req.get is not a function
错误原因
用户创建成功触发邮件验证时出现该错误,核心原因是Payload在本地模式(local: true)下运行时,不会生成完整的Express请求对象,而内部的sendVerificationEmail方法尝试调用req.get(),导致类型错误。
解决方案
方案1:禁用本地模式(推荐)
如果你的应用基于Express搭建,初始化Payload时将local设为false,确保使用完整的Express请求上下文:
cached.promise = payload.init({ email: { transport: transporter, fromAddress: 'mymail@domain.mail', fromName: 'MyApp', }, secret: process.env.PAYLOAD_SECRET, local: false, // 禁用本地模式 ...(initOptions || {}), })
方案2:手动传入模拟请求对象(脚本/本地测试场景)
若必须在本地模式下运行(如批量创建用户脚本),调用payload.create()时需传入包含get方法的模拟req对象:
await payload.create({ collection: 'users', data: { /* 你的用户数据 */ }, req: { get: () => 'http://localhost:3000' // 模拟获取主机地址的方法 } })
补充检查
你的Resend传输配置无明显问题,需确认RESEND_API_KEY已正确加载,且发件地址在Resend后台完成验证。
报错信息
TypeError: req.get is not a function at sendVerificationEmail (C:\git\myapp\node_modules\payload\src\auth\sendVerificationEmail.ts:35:36) at create (C:\git\myapp\node_modules\payload\src\collections\operations\create.ts:269:28) at processTicksAndRejections (node:internal/process/task_queues:95:5) ⨯ unhandledRejection: TypeError: req.get is not a function at sendVerificationEmail (C:\git\myapp\node_modules\payload\src\auth\sendVerificationEmail.ts:35:36) at create (C:\git\myapp\node_modules\payload\src\collections\operations\create.ts:269:28) at processTicksAndRejections (node:internal/process/task_queues:95:5)
你的配置代码
传输器配置
const transporter = nodemailer.createTransport({ host: 'smtp.resend.com', secure: true, port: 465, auth: { user: 'resend', pass: process.env.RESEND_API_KEY, }, })
Payload初始化
cached.promise = payload.init({ email: { transport: transporter, fromAddress: 'mymail@domain.mail', fromName: 'MyApp', }, secret: process.env.PAYLOAD_SECRET, local: initOptions?.express ? false : true, ...(initOptions || {}), })
用户模型
const Users: CollectionConfig = { slug: "users", auth: { verify:{ generateEmailHTML: ({req, token, user}) => { const url = `https://yourfrontend.com/verify?token=${token}` return `Hey ${user.email}, verify your email by clicking here: ${url}` } } }, access: { read: () => true, create: () => true, }, fields:[ { name: "role", defaultValue: "user", required: true, type: "select", options: [ {label: "Admin", value: "admin"}, {label: "User", value: "user"} ] }, { name: "username", required: true, type: "text" } ] }
内容的提问来源于stack exchange,提问作者Code Eagle
相关产品推荐
相关产品推荐

