首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Strapi password recovery‘/forgot password’返回400

Strapi password recovery‘/forgot password’返回400
EN

Stack Overflow用户
提问于 2021-10-15 16:21:27
回答 1查看 140关注 0票数 0

我正在尝试在我的strapi应用程序上实现密码恢复功能。

遵循我调用的文档:

代码语言:javascript
复制
axios.post('http://localhost:1337/auth/forgot-password', {
      email: <MY_EMAIL>,
    })

尽管网络调用被挂起了几分钟,然后以400 Bad Request错误响应。

有没有人经历过类似的事情?

我检查了用户权限,公共角色有权访问forgotpassword。我可以尝试任何其他的配置检查吗?

非常感谢,

EN

回答 1

Stack Overflow用户

发布于 2021-10-16 13:10:23

forgotPassword函数抛出Bad Request 400错误的原因可能有4个:

  1. Invalid email format
  2. If 没有用户在后端使用这样的电子邮件
  3. 如果用户存在E211但在后端被标记为已阻止E213在后端被标记为已阻止<代码>H214<代码>H115如果无法通过电子邮件服务向用户发送邮件<代码>H216G217

源代码

代码语言:javascript
复制
async forgotPassword(ctx) {
    let { email } = ctx.request.body;

    // Check if the provided email is valid or not.
    const isEmail = emailRegExp.test(email);

    if (isEmail) {
      email = email.toLowerCase();
    } else {
      return ctx.badRequest(
        null,
        formatError({
          id: 'Auth.form.error.email.format',
          message: 'Please provide a valid email address.',
        })
      );
    }

    const pluginStore = await strapi.store({
      environment: '',
      type: 'plugin',
      name: 'users-permissions',
    });

    // Find the user by email.
    const user = await strapi
      .query('user', 'users-permissions')
      .findOne({ email: email.toLowerCase() });

    // User not found.
    if (!user) {
      return ctx.badRequest(
        null,
        formatError({
          id: 'Auth.form.error.user.not-exist',
          message: 'This email does not exist.',
        })
      );
    }

    // User blocked
    if (user.blocked) {
      return ctx.badRequest(
        null,
        formatError({
          id: 'Auth.form.error.user.blocked',
          message: 'This user is disabled.',
        })
      );
    }

    // Generate random token.
    const resetPasswordToken = crypto.randomBytes(64).toString('hex');

    const settings = await pluginStore.get({ key: 'email' }).then(storeEmail => {
      try {
        return storeEmail['reset_password'].options;
      } catch (error) {
        return {};
      }
    });

    const advanced = await pluginStore.get({
      key: 'advanced',
    });

    const userInfo = sanitizeEntity(user, {
      model: strapi.query('user', 'users-permissions').model,
    });

    settings.message = await strapi.plugins['users-permissions'].services.userspermissions.template(
      settings.message,
      {
        URL: advanced.email_reset_password,
        USER: userInfo,
        TOKEN: resetPasswordToken,
      }
    );

    settings.object = await strapi.plugins['users-permissions'].services.userspermissions.template(
      settings.object,
      {
        USER: userInfo,
      }
    );

    try {
      // Send an email to the user.
      await strapi.plugins['email'].services.email.send({
        to: user.email,
        from:
          settings.from.email || settings.from.name
            ? `${settings.from.name} <${settings.from.email}>`
            : undefined,
        replyTo: settings.response_email,
        subject: settings.object,
        text: settings.message,
        html: settings.message,
      });
    } catch (err) {
      return ctx.badRequest(null, err);
    }

    // Update the user.
    await strapi.query('user', 'users-permissions').update({ id: user.id }, { resetPasswordToken });

    ctx.send({ ok: true });
  },

您可以查看整个源代码here,以便更好地理解。此外,我建议您检查终端或浏览器响应,以获取有关错误响应的更多信息。响应通常包含message密钥,它将告诉您此请求失败的确切原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69587786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档