嘿,伙计们! ðρ
,如果您渴望弯曲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;
};
解剖代码ð§
让我们拿一个放大镜到此代码段:
-
我们正在使用Strapi的实用程序库,该图书馆具有大量有用的工具。
-
我们正在导出一个接受插件作为参数的函数。
-
在此功能中,我们正在保留原始控制器的回调和resetPassword。
-
那么,我们正在定义一个新的重置通信函数。这不会丢弃原始功能;相反,它仅在我们添加了自己的验证后才执行。
-
在此新功能中,我们正在检索用户请求密码重置。
-
然后,我们将新密码与旧密码与Strapi的内置密码验证方法进行比较。
-
如果新密码与旧密码相同,我们正在提出验证错误。
-
最后,我们执行原始的重置通信函数,允许Strapi执行其通常的魔术。
通过以这种方式扩展ResetPassword方法,我们在保持核心Strapi功能完整的同时添加了自定义行为。这类似于经典歌曲的熟练混音 - 您可以在添加独特的旋转时保持原始旋律! ðµ
仅此而已!出去那里,让Strapi为您工作。与往常一样,请记住对您的代码进行彻底测试,以确保其行为预期。愉快的编码! ð�ð»ð©âð»