使用 rails console 重置 Redmine 管理员密码

忘记密码是常见的事,一般系统会配置有找回密码功能,如果未配置该功能,可以请管理员重置密码。

如果管理员密码忘记,又恰好没有配置找回密码的功能,就比较尴尬了。即使想直接修改数据库,可密码是加密字段,总不能再找个加密算法吧。

好在 Rails 功能足够强,只要能登录后台,一切都好说。rails console 是 Rails 命令行工具之一,允许程序开发人员或系统运维人员通过命令行与 Rails 应用交互。本文记录使用 rails console 重置 Redmine 管理员密码的过程。

进入 rails console 环境

下面假定 $REDMINE_ROOT 为 Redmine 安装目录,运行以下命令登录后台。

cd $REDMINE_ROOT
RAILS_ENV=production rails console

查找管理员用户

在 rails console 中运行以下命令查找管理员用户。

User.find_by_admin(true)

假设以上输出为:

=> #<User id: 1, login: "manager", hashed_password: "3b46ab60a781a55a11fc1d86137eb49c6e444820", firstname: "Easy", lastname: "Redmine", admin: true, status: 1, last_login_on: "2018-11-30 02:47:49", language: "en", auth_source_id: nil, created_on: "2018-11-13 06:31:44", updated_on: "2018-11-30 05:21:35", type: "User", identity_url: nil, mail_notification: "all", salt: "b97ee92aa69ff9bde75914899ff9f3e4", must_change_passwd: false, passwd_changed_on: "2018-11-13 06:57:32">

选择要修改的用户

从以上 rails console 输出中选择要修改的用户,记住其 login, 并将用户对象赋值给一个变量。

admin = User.find(1)

设置用户对象的密码并保存

输入以下命令,设置用户对象的密码并保存:

admin.password = 'Easy Redmine'
admin.save!

注意设置的密码需要符合系统设置的规则,否则在保存时会出现错误。比如在密码过短时, 执行 admin.save! 会出现异常:

ActiveRecord::RecordInvalid: Validation failed: Password is too short (minimum is 8 characters)

只有在 admin.save! 返回 true 时才表示保存成功。

验证测试及退出 rails console

此时即可启动 Redmine 用查询到的 login 和 新设置的 password 进行测试了。

如果没有问题,即可在 rails console 中输入执行 quit 退出 rails console 环境。

环境说明

以上命令在阿里云主机进行过测试,测试环境的主要软件版本如下:

  • Ubuntu 16.04 LTS
  • ruby 2.3.1p112 (2016-04-26)
  • Rails 4.2.6
  • Redmine 3.4.6
上一篇:分享一个异步任务在遇到IO异常时支持递归回调的辅助方法


下一篇:物联网入门训练营“W800开发板的奇思妙想”:远程控制房间温度