使用自定义ruby文件重置密码

Discourse 中用于更新密码的自定义函数

我们可以使用此代码更新密码吗?

例如:-
User.find_by(username: ‘gollum’).update!(password: ‘shiiiire!-BAGGINS!’)

或者

我们可以创建一个自定义插件并使用自定义端点(如 API)
然后使用用户凭据创建令牌,然后使用 API 重置密码。

请分享完成此任务的最佳方法。

您好,Hitesh:

您的用例是什么?为什么不使用内置功能?

1 个赞

感谢您的回复。

我正在使用自定义脚本将 Drupal 用户迁移到 Discourse,但密码被保存为哈希字符串,用户无法使用(admin@123)之类的可靠密码登录。

但是,他们可以使用密码哈希登录,例如:
例如:- 3sdfd32423@#423fdsfr

您能否详细解释一下内置功能?

您看过这个了吗?这或许有帮助:

它支持 Drupal 7 密码:

1 个赞

你好 @Canapin

另外,我使用了这个插件,但它不起作用

不——它在工作。

这是最古老的第三方插件之一(现在已有 9 年多的历史了!),并且一直得到维护和正常工作。它可能对你来说不起作用,但解决方法是找出它为什么对你不起作用,而不是尝试替代路线。

您能重新表述一下吗?我不明白您在说什么。

我的 Drupal 网站是否将用户密码以加密代码的形式存储在数据库中?我使用 dsiscourse API 将所有用户迁移到了一个名为 Discourse 的平台。我创建了一个包含用户详细信息和来自 Drupal 数据库的密码代码的载荷,并将它们放入 Discourse。

我以为用户可以在 Drupal 上使用相同的登录凭据,但它不起作用。Discourse 不接受用户的实际密码,例如“admin@123”。相反,它使用用户密码哈希代码,例如“3sdfd32423@#423fdsfr”。

Discourse 会获取 Drupal 的密码代码,并将其放入其自身数据库的加密算法中。

你能给我们展示一下你是怎么做的吗?
如果你一直在使用 API,你不应该将 Drupal 哈希设置为密码。你应该将哈希设置为一个名为 import_pass 的自定义用户字段。我不确定这是否可以通过 API 实现。

1 个赞

我在安装 Discourse Migrate 插件时遵循了您的步骤

-> 首先,我将插件安装到我的 discourse 中,但未启用,然后创建了一个
名为 import_pass 的自定义字段到 discourse 中

-> 在 payload 中添加存储在此自定义字段中的密码哈希

-> 用户上传到 discourse 后,启用插件并使用用户凭据在新窗口中登录,但他们没有

这是 明确 是步骤的一部分。

在创建具有该名称的用户字段与创建具有该名称的自定义字段之间存在差异。因此,哈希值被存储在了错误的位置。

问题在于,我认为后者(自定义字段)无法通过 API 访问。
我认为最好的前进方法是编写一些自定义的一次性代码,将用户字段的内容移动到实际的自定义字段中。

(我曾考虑修改插件,使其也查看用户字段,但我认为将这些哈希值暴露给用户界面存在安全风险,所以不打算这样做)。

这将起作用,请从 rails 控制台运行(标记您以便您看到编辑 @Hitesh_Sharma

ufkey = "user_field_#{UserField.find_by(name: 'import_pass').id}"
User.all.each do |u|
  if u.custom_fields.key?(ufkey)
    u.custom_fields[:import_pass] = u.custom_fields[ufkey]
    u.custom_fields.delete(ufkey)
    u.save_custom_fields
  end
end
2 个赞