忘記密碼是常見的事,一般系統會配置有找回密碼功能,如果未配置該功能,可以請管理員重置密碼。
如果管理員密碼忘記,又恰好沒有配置找回密碼的功能,就比較尷尬了。即使想直接修改數據庫,可密碼是加密字段,總不能再找個加密算法吧。
好在 Rails 和 irb 功能足夠強,只要能登錄後臺,一切都好說。irb 不僅可以用於輔助程序開發,也可以用於系統運維。本文記錄使用 irb 重置 Redmine 管理員密碼的過程。
進入 irb 環境
下面假定 $REDMINE_ROOT 爲 Redmine 安裝目錄,運行以下命令登錄後臺。
cd $REDMINE_ROOT
RAILS_ENV=production rails console
查找管理員用戶
在 irb 中運行以下命令查找管理員用戶。
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">
選擇要修改的用戶
從以上 irb 輸出中選擇要修改的用戶,記住其 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 時才表示保存成功。
驗證測試及退出 irb
此時即可啓動 Redmine 用查詢到的 login 和 新設置的 password 進行測試了。
如果沒有問題,即可在 irb 中輸入 quit 執行後退出 irb 環境。
quit
環境說明
以上命令在阿里雲主機進行過測試,測試環境的主要軟件版本如下:
- Ubuntu 16.04 LTS
- ruby 2.3.1p112 (2016-04-26)
- Rails 4.2.6
- Redmine 3.4.6