You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Strapi中通过entityService创建用户时发送确认邮件

解决Strapi自定义注册端点不发送确认邮件的问题

直接用entityService创建用户只会在数据库插入用户记录,不会触发users-permissions插件内置的注册流程(包括生成确认token、发送验证邮件)。要让自定义端点也发送确认邮件,你需要调用插件封装好的用户注册服务,而非直接操作实体。

修改后的控制器代码

async register(ctx) {
    try {
        const { firstName, lastName, nickname, email, phoneNumber, password, confirmPassword } = ctx.request.body;

        if (password !== confirmPassword) {
            ctx.badRequest('密码与确认密码不匹配');
            return;
        }

        // 调用users-permissions插件的用户注册服务,自动处理邮件发送
        const user = await strapi.plugin('users-permissions').service('user').add({
            username: nickname,
            email: email,
            password: password,
            confirmed: false, // 强制设置为未确认,触发邮件发送(匹配插件配置逻辑)
        });

        if (!user) {
            ctx.badRequest('用户创建失败');
            return;
        }

        // 创建用户档案并关联到刚创建的用户
        const userProfile = await strapi.entityService.create("api::user-profile.user-profile", {
            data: {
                nickname: nickname,
                first_name: firstName,
                last_name: lastName,
                phone_number: phoneNumber,
                user: user.id, // 关联到用户表,需确保user-profile模型已配置该关联字段
            }
        });

        if (!userProfile) {
            ctx.badRequest('用户档案创建失败');
            return;
        }

        ctx.body = userProfile;
    } catch (err) {
        ctx.internalServerError(err.message);
    }
}

关键说明

  1. 使用插件内置服务:strapi.plugin('users-permissions').service('user').add()方法会自动执行以下操作:
    • 加密用户密码
    • 生成邮箱确认token
    • 根据插件配置发送确认邮件(前提是已在Strapi后台配置好邮件提供者,且启用了确认邮件模板)
  2. 关联用户与档案:创建user-profile时通过user: user.id关联到新用户,需确保user-profile模型定义中已添加与plugin::users-permissions.user的关联字段(可在api/user-profile/models/user-profile.js的relations中配置)。
  3. 错误处理优化:替换原字符串返回,使用Strapi内置的ctx.badRequest()和ctx.internalServerError()方法,符合框架响应规范。

前置检查

  • 确保Strapi后台邮件配置正确(路径:Settings -> Email)
  • 确认users-permissions插件的邮箱确认功能已启用(路径:Settings -> Users & Permissions Plugin -> Advanced Settings)
  • 确认确认邮件模板已配置启用(路径:Settings -> Users & Permissions Plugin -> Email Templates -> Confirmation)

内容的提问来源于stack exchange,提问作者UnaiZelaia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:57:39