使用 irb 重置 Redmine 管理員密碼

忘記密碼是常見的事,一般系統會配置有找回密碼功能,如果未配置該功能,可以請管理員重置密碼。

如果管理員密碼忘記,又恰好沒有配置找回密碼的功能,就比較尷尬了。即使想直接修改數據庫,可密碼是加密字段,總不能再找個加密算法吧。

好在 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章