Strapi v4 电子邮件确认电子邮件和后续步骤

Strapi v4 Email Confirmation Email and subsequent steps

我已经成功创建了一个 sendgrid 帐户并安装了 strapi sendgrid npm 包,让 Strapi 自动发送一封确认电子邮件 link 以确认新用户注册。

但是我注意到在确认邮件中 link 显示:

http://0.0.0.0:1337/api/auth/email-confirmation?confirmation=d48f20893fed7a1b0854b12996d409c31f3c7f9c

第一个问题是 0.0.0.0 的 ip 地址,这不是我 strapi 的正确 ip 地址……假设我的 ip 地址是 1.1.1.1 …… 发送确认邮件时,如何让 URL 指向正确的 IP 地址?我似乎没有在 Stapi 后端找到要更改的字段以更改 URL.....

其次,当我将 0.0.0.0 更改为我正确的 IP 地址并将其余部分保持不变时......link 似乎不起作用,我的用户中的电子邮件在 strapi 后面end 不确认电子邮件本身。

如何确保 Strapi 的确认 link 确实可以确认和验证新用户的电子邮件???

=======================================

==========

我已将 config/server.js 文件更改为以下内容:

module.exports = ({ env }) => ({
  host: env('HOST', 'MY_IP_ADDRESS'),
  port: env.int('PORT', 1337),
  app: {
    keys: env.array('APP_KEYS'),
  },
});

所以我现在收到的确认 link 显示如下:

MY_IP_ADDRESS:1337/api/auth/email-confirmation?confirmation=395d52db4863d7617427f65ae7010ece32d2b2da

然而,当我将 link 复制并粘贴到浏览器(与单击它相同)时,我得到:

{"data":null,"error":{"status":500,"name":"InternalServerError","message":"Internal Server Error"}}

当我执行 pm2 logs 时,它显示以下错误:

0|strapi | [2022-05-20 17:25:35.196] error: Undefined attribute level operator confirmationToken 0|strapi | Error: Undefined attribute level operator confirmationToken 0|strapi | at processAttributeWhere (/home/bliss/strapi/node_modules/@strapi/database/lib/query/helpers/where.js:82:13) 0|strapi | at processWhere (/home/bliss/strapi/node_modules/@strapi/database/lib/query/helpers/where.js:176:36) 0|strapi | at /home/bliss/strapi/node_modules/@strapi/database/lib/query/helpers/where.js:104:29 0|strapi | at Array.map () 0|strapi | at Object.processWhere (/home/bliss/strapi/node_modules/@strapi/database/lib/query/helpers/where.js:104:18) 0|strapi | at Object.processState (/home/bliss/strapi/node_modules/@strapi/database/lib/query/query-builder.js:234:29) 0|strapi | at Object.getKnexQuery (/home/bliss/strapi/node_modules/@strapi/database/lib/query/query-builder.js:271:12) 0|strapi | at Object.execute (/home/bliss/strapi/node_modules/@strapi/database/lib/query/query-builder.js:352:25) 0|strapi | at Object.findOne (/home/bliss/strapi/node_modules/@strapi/database/lib/entity-manager.js:121:10) 0|strapi | at processTicksAndRejections (node:internal/process/task_queues:96:5) 0|strapi | at async Object.findOne (/home/bliss/strapi/node_modules/@strapi/strapi/lib/services/entity-service/index.js:67:20) 0|strapi | at async Object.emailConfirmation (/home/bliss/strapi/node_modules/@strapi/plugin-users-permissions/server/controllers/auth.js:381:18) 0|strapi | at async returnBodyMiddleware (/home/bliss/strapi/node_modules/@strapi/strapi/lib/services/server/compose-endpoint.js:52:18) 0|strapi | at async policiesMiddleware (/home/bliss/strapi/node_modules/@strapi/strapi/lib/services/server/policy.js:24:5) 0|strapi | at async serve (/home/bliss/strapi/node_modules/koa-static/index.js:59:5) 0|strapi | at async returnBodyMiddleware (/home/bliss/strapi/node_modules/@strapi/strapi/lib/services/server/compose-endpoint.js:52:18) 0|strapi | at async policiesMiddleware (/home/bliss/strapi/node_modules/@strapi/strapi/lib/services/server/policy.js:24:5) 0|strapi | at async /home/bliss/strapi/node_modules/@strapi/strapi/lib/middlewares/body.js:51:9 0|strapi | at async /home/bliss/strapi/node_modules/@strapi/strapi/lib/middlewares/logger.js:22:5 0|strapi | at async /home/bliss/strapi/node_modules/@strapi/strapi/lib/middlewares/powered-by.js:16:5 0|strapi | at async cors (/home/bliss/strapi/node_modules/@koa/cors/index.js:56:32) 0|strapi | at async /home/bliss/strapi/node_modules/@strapi/strapi/lib/middlewares/errors.js:13:7 0|strapi | at async session (/home/bliss/strapi/node_modules/koa-session/index.js:41:7) 0|strapi | at async /home/bliss/strapi/node_modules/@strapi/strapi/lib/services/metrics/middleware.js:29:5 0|strapi | [2022-05-20 17:25:35.517] http: GET /favicon.ico (1 ms) 200

更新:根据您分享的日志,我能够追踪到 a bug report on strapi's GitHub issues。该错误已在一周前修复,并作为 4.1.11 版的一部分发布。尝试将 strapi 至少更新到这个版本,看看是否仍然出现错误。


感谢您使用 SendGrid!不幸的是,您的问题是由 strapi 引起的,无论您使用的是哪个电子邮件提供商,您都会 运行 陷入这个问题。

如果您运行使用默认配置在本地使用 strapi,http://0.0.0.0:1337 应该解析为您的 strapi 应用程序,因此 URL 在确认电子邮件中也应该有效。

用于此 URL 的主机和端口是从 .env 文件中获取的,默认情况下如下所示:

HOST=0.0.0.0
PORT=1337
...

您可以根据需要更改您的主机和端口。如果由于某种原因 0.0.0.0 不起作用(它在我的机器上起作用),请尝试将主机更改为您的 IP、本地主机或 127.0.0.1。

如果您向另一台计算机上的用户发送确认电子邮件,他们将无法访问您的本地 运行ning strapi 实例。

当您将 strapi 应用程序部署到生产环境时,您需要更新 .env 文件或以其他方式覆盖环境变量以匹配生产机器的配置.