忘记密码是常见的事,一般系统会配置有找回密码功能,如果未配置该功能,可以请管理员重置密码。
如果管理员密码忘记,又恰好没有配置找回密码的功能,就比较尴尬了。即使想直接修改数据库,可密码是加密字段,总不能再找个加密算法吧。
好在 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