2013-05-03 48 views
2

我嘗試用gem「devise_ldap_authenticatable」重置用戶密碼,但沒有起作用。如何在不使用old_password的情況下重置ldap用戶密碼?使用Net :: Ldap gem或devise_ldap_authenticatable gem

我試圖運行的命令是。

Devise::LdapAdapter.update_password(login, new_password) 

但它沒有工作。

不幸的是,當它試圖綁定它時,會嘗試將該用戶與密碼nil綁定,因爲舊密碼爲零。我也嘗試綁定與管理員用戶憑證,但雖然管理員用戶正在登錄;密碼不會更新。

如何重新設置用戶ldap帳戶密碼而不使用'old_password'作爲具有該特權的管理員用戶?

如果您知道更好的解決方案,請多多分享!

回答

3

使用修改類型'replace',任何密碼屬性所屬的屬性類型和新密碼值向服務器發送修改請求。執行修改請求的連接的授權狀態必須具有密碼屬性的訪問權限或具有密碼重置權限。

+0

我嘗試這樣做: ldap.modify(:DN =>「的uid = TEST_1,OU =人,DC = SDE, dc = myldapserver,dc = com「,:ops => [:replace,:password,」hello「]) ldap.get_operation_result返回#。所以看起來操作起作用了,但是當我嘗試用新密碼登錄時,它不起作用。似乎該操作沒有被記錄。 – Richardsondx 2013-05-06 14:02:34

+0

Ldap.modify(:dn =>「uid = test_1,ou = people,dc = sde,dc = myserver,dc = com」,:operations => [:replace,:unicodePwd,Iconv.conv('UTF-16LE ','UTF-8',''''+'hello'+''')]) 您的建議應該有效。我正在使用的用戶沒有正確的權限。 -_-我不得不向基礎設施團隊提出請求.....(corporate -_-).....謝謝! – Richardsondx 2013-05-06 15:59:30

+0

這幾乎爲我工作。我必須做一個額外的步驟:'Iconv.conv('UTF-16LE','UTF-8',(?「+ password +?」))。force_encoding('UTF-8')' – tamouse 2015-02-04 01:15:15

0

如果你不想依靠 '的iconv':

unicodepwd = "\"#{plain_text_password}\"".encode(Encoding::UTF_16LE). 
    force_encoding(Encoding::ASCII_8BIT) 
相關問題