Bây giờ tôi nhận ra chủ đề này đã được đề cập nhiều lần trước đây. Tuy nhiên, dường như không có giải pháp nào muốn làm cho trường mật khẩu hiện tại chỉ được miễn khi mật khẩu trong cơ sở dữ liệu trống.Ruby on Rails, Devise đá quý. Làm cách nào để xóa mật khẩu hiện tại khi mật khẩu trống?
Tôi hiện đã mật khẩu cần thiết trong mô hình người dùng của tôi như:
def password_required?
(authentications.empty? || !password.blank?) && super
end
Sau đó, tôi sao chép chức năng cập nhật qua vào đăng ký điều khiển của tôi:
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
Tôi chỉ không biết làm thế nào để đi về đảm bảo rằng devise không cần một mật khẩu khi chỉnh sửa một mật khẩu trống, tôi cũng cần phải loại bỏ trường current_password từ xem và làm điều này?
<% 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>
Bất kỳ đề xuất nào đều tuyệt vời về điều này vì tôi chắc chắn tôi đang xem một số thứ nhưng tôi vẫn còn mới đối với Rails. Cảm ơn!
'current_user.has_no_password' trả về 'true' nếu không có một mật khẩu, do đó nếu câu lệnh thực thi khối của nó. Bạn đang sử dụng ngôn ngữ tiêu cực để xác nhận câu lệnh đó ... bạn nên viết 'trừ khi current_user.has_no_password?', Nhưng nó vẫn đọc vui. Nó dễ đọc hơn nếu bạn làm 'current_user.has_password?' Và đặt định nghĩa trả về 'self.encrypted_password.present?' (Tôi nhận ra điều này đã được thảo luận dưới đây, nhưng điều này thuộc về các chú thích, và tôi đã đưa ra một thay thế giải pháp dễ đọc hơn) – wulftone
Tôi đã sử dụng nó làm cơ sở cho một thứ khác và nó hoạt động khá nhiều.Chỉ thay đổi: Tôi phải xóa 'if! Params [: current_password] .blank?' Để tránh nhận các lỗi gán hàng loạt, vì mật khẩu hiện tại đã được đặt thành '" "' (và do đó 'trống? == true') do đó không bị xóa khỏi các tham số, và sau đó 'update_attributes (params)' đã cố cập nhật bản ghi người dùng bằng ': current_password =>" '' - rõ ràng là không thành công vì 'current_password' không phải là thuộc tính trên người dùng ... Tôi đã có kết thúc sai của thanh mặc dù? Ngoài ra không phải là 'tự' s dự phòng? – dgmstuart
Tôi đã thử giải pháp này, tôi đã nhận Không thể gán hàng loạt thuộc tính được bảo vệ: current_password – simo