扩展Strapi插件ðultimateGuideð - âð»
#javascript #网络开发人员 #strapi #plugin

嘿,伙计们! ðρ

,如果您渴望弯曲JavaScript肌肉并与Strapi进行编码冒险,那么您选择了正确的帖子。开源CMS Powerhouse Strapi配备了一个插件系统,该插件系统与灵活性和适应性有关,如今,我们将有点适合我们的独特要求。 ð§

任务ð

我们的目标很简单,但至关重要 - 以确保用户在重置密码时不会继续依靠旧的忠诚。好消息是Strapi提供了一个插件系统,我们可以调整该系统以确保用户始终选择新密码。

准备工作ð

在我们深入探讨代码之前,以下是要牢记的一些重要点:

我们可以将此方法应用于Strapi插件中声明的各种方法。是否是寄存器,noveotpassword,resetPassword,resetPassword,用户或@node_modules/@strapi/plugin-<name-of-the-plugin>中的任何其他方法(在我们的情况下,您可以使用,您可以用户使用),您都可以将其弯曲到您的意志。

要延长Strapi插件,请在SRC/Extensions/内部创建一个新文件夹。这是您可以在不打扰核心插件代码的情况下进行更改的地方。

在新文件夹中,添加一个名为strapi-server.js或strapi-server.ts的文件,然后将自定义代码放在此处。现在,让我们看看这在实践中的工作方式!

代码ð

查看下面的最终解决方案:

const utils = require('@strapi/utils');

module.exports = (plugin) => {

    const { ValidationError } = utils.errors;
    const originalControllers = {
        callback: plugin.controllers.auth.callback,
        resetPassword: plugin.controllers.auth.resetPassword,
    }

    plugin.controllers.auth.resetPassword = async (ctx) => {
        const { password, passwordConfirmation } = ctx.request.body;
        // Fetch user
        const user = await strapi
            .query('plugin::users-permissions.user')
            .findOne({ resetPasswordToken: ctx.params.code });

        // Compare old and new passwords
        const validPassword = await strapi.plugins['users-permissions'].services.user.validatePassword(password, user.password);

        if (validPassword) {
            throw new ValidationError('Passwords cannot match previous passwords');
        }

        await originalControllers.resetPassword(ctx);
    }

    return plugin;

};

解剖代码ð§

让我们拿一个放大镜到此代码段:

  1. 我们正在使用Strapi的实用程序库,该图书馆具有大量有用的工具。

  2. 我们正在导出一个接受插件作为参数的函数。

  3. 在此功能中,我们正在保留原始控制器的回调和resetPassword。

  4. 那么,我们正在定义一个新的重置通信函数。这不会丢弃原始功能;相反,它仅在我们添加了自己的验证后才执行。

  5. 在此新功能中,我们正在检索用户请求密码重置。

  6. 然后,我们将新密码与旧密码与Strapi的内置密码验证方法进行比较。

  7. 如果新密码与旧密码相同,我们正在提出验证错误。

  8. 最后,我们执行原始的重置通信函数,允许Strapi执行其通常的魔术。

通过以这种方式扩展ResetPassword方法,我们在保持核心Strapi功能完整的同时添加了自定义行为。这类似于经典歌曲的熟练混音 - 您可以在添加独特的旋转时保持原始旋律! ðµ

仅此而已!出去那里,让Strapi为您工作。与往常一样,请记住对您的代码进行彻底测试,以确保其行为预期。愉快的编码! ð�ð»ð©âð»

Hackerman