我使用devise
爲authentication
和我有每個用戶的role
,我允許與admin
角色的用戶創建新的用戶,我想管理員用戶edit the password
爲用戶剩下的,如果他們忘記了自己的密碼。但是我無法在編輯中改變沒有當前密碼的密碼。那麼我怎樣才能允許管理員用戶通過編輯用戶密碼來改變密碼,並像我們爲其餘的值一樣保存。如何在設計中更改沒有當前密碼的密碼?
回答
有一個方法內置設計稱爲update_without_password
。
下面是我用我的更新方法是什麼:
# PUT /manage_users/1
# PUT /manage_users/1.json
def update
@user = User.find(params[:id])
able_to_edit_profile?
# required for settings form to submit when password is left blank
if params[:user][:password].blank?
params[:user].delete("password")
params[:user].delete("password_confirmation")
end
respond_to do |format|
if @user.update_attributes(params[:user])
@user.save
# sign the user in with their new password so it doesn't redirect to the login screen
sign_in @user, :bypass => true
format.html {
flash[:notice] = 'User was successfully updated.'
redirect_to session.delete(:return_to)
}
format.json { head :no_content }
else
format.html { render action: "edit", notice: 'Error updating user.' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
# If the user is not an admin and trying to edit someone else's profile, redirect them
def able_to_edit_profile?
if !current_user.try(:admin?) && current_user.id != @user.id
flash[:alert] = "That area is for administrators only."
redirect_to :root
end
end
實際上,如果我們想更改其他值而不提供密碼,但我們無法更新密碼,則可以使用此update_without_password。 – logesh 2013-03-26 14:39:34
我用'if params [:user] [:password] .blank? params [:user] .delete(「password」) params [:user] .delete(「password_confirmation」) end'但帶有@ user.update_attributes(params [:user]),它現在可用。 – logesh 2013-03-28 15:17:44
啊很高興知道。實際上,我昨天剛剛遇到了一個問題,並且注意到這段代碼並未改變用戶密碼。我會用你的解決方案來解決我的問題。很高興我們可以一起解決我們的兩個問題。 – Catfish 2013-03-28 15:25:40
由於update_without_password
仍然需要current_password
更新密碼,你就必須有一個update
這樣的:
def update
# required for settings form to submit when password is left blank
if params[:user][:password].blank?
params[:user].delete("password")
params[:user].delete("password_confirmation")
end
@user = User.find(current_user.id)
if @user.update_attributes(params[:user])
set_flash_message :notice, :updated
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
render "edit"
end
end
這示例用於更新當前用戶(包括用戶的密碼),但您可以對其進行修改以適應您的需求。
是的,這是正確的答案 – 2015-10-08 10:08:25
- 1. 更改沒有當前密碼字段的密碼在php
- 2. Rails 4,如何在密碼更改時詢問當前密碼?
- 3. MVC驗證更改密碼。當前密碼與新密碼
- 4. 如何設計允許我更新密碼而不通過當前密碼?
- 5. 在設計中更改用戶密碼
- 6. Rails沒有密碼設計
- 7. Rails3用戶更改密碼,如何更改當前會話密碼?
- 8. 在檢索當前密碼時更改asp.net用戶密碼
- 9. Rails 3.2 Omniauth設計 - 添加密碼 - 跳過當前密碼
- 10. 在設計用戶上更改密碼
- 11. 停止設計當前密碼要求
- 12. Ruby on Rails,設計寶石。密碼爲空時如何刪除當前密碼?
- 13. 更改設計管理員的密碼沒有:可註冊
- 14. 當我更改新密碼時如何驗證舊密碼
- 15. C++ - 我的密碼程序沒有更改密碼
- 16. 設計更改密碼格式
- 17. Rails 3設計手動更改密碼
- 18. 設計自定義密碼更改
- 19. 設計,允許用戶更改密碼
- 20. 更新密碼設計
- 21. 設計更新密碼
- 22. 設計密碼更新
- 23. 如何更改設計中的重置密碼URL RoR
- 24. 在更改爲新密碼之前確認舊密碼codeigniter
- 25. php在更改密碼之前驗證密碼
- 26. 更改帳戶設置時檢查用戶當前的密碼
- 27. 更改密碼
- 28. 更改密碼
- 29. 更改密碼
- 30. 如何更改LAMP密碼?
當您嘗試更改另一個用戶的密碼時會發生什麼?我只是使用我在下面發佈的代碼做得很好。 – Catfish 2013-03-26 14:56:19