gpt4 book ai didi

ruby-on-rails - Ruby on Rails,Devise gem 。密码为空时如何删除当前密码?

转载 作者:行者123 更新时间:2023-12-04 05:34:08 24 4
gpt4 key购买 nike

现在我意识到这个话题已经被讨论过很多次了。但是,似乎没有解决方案希望仅当数据库中的密码为空时才使当前密码字段免除。

我目前在我的用户模型中具有所需的密码,例如:

def password_required?
(authentications.empty? || !password.blank?) && super
end

然后,将更新功能复制到我的注册 Controller 中:
def update
if resource.update_with_password(params[resource_name])
set_flash_message :notice, :updated
sign_in resource_name, resource, :bypass => true
redirect_to after_update_path_for(resource)
else
clean_up_passwords(resource)
render_with_scope :edit
end
end

我只是不知道如何在编辑空白密码时确保devise不需要密码,我还需要从 View 中删除current_password字段并执行此操作吗?
<% if current_user.password_required? %>
<p><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
<%= f.password_field :current_password %></p>
<% end %>
<p><%= f.submit "Update" %></p>

关于此的任何建议都是不错的选择,因为我敢肯定我会忽略一些东西,但总体上来说我仍然对Rails还是陌生的。谢谢!

最佳答案

好吧,我终于明白了!

将以下内容添加到您的类RegistrationsController

def update
if resource.update_with_password(params[resource_name])
set_flash_message :notice, :updated
sign_in resource_name, resource, :bypass => true
redirect_to after_update_path_for(resource)
else
clean_up_passwords(resource)
render_with_scope :edit
end
end

然后将以下内容转换为您的用户模型:
def update_with_password(params={})
current_password = params.delete(:current_password) if !params[:current_password].blank?

if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end

result = if has_no_password? || valid_password?(current_password)
update_attributes(params)
else
self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
self.attributes = params
false
end

clean_up_passwords
result
end

def has_no_password?
self.encrypted_password.blank?
end

令我有些困惑的唯一事情是在编辑 View 中:
<% if !current_user.has_no_password? %>

我将其包装在以下情况中:如果我本来以为是:
<% if current_user.has_no_password? %>

如果有人能看到任何改进我的代码的方法,或者以其他更有效的方式告诉我!

关于ruby-on-rails - Ruby on Rails,Devise gem 。密码为空时如何删除当前密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com