Tôi đang phát triển ứng dụng bằng Rails và Devise để xác thực của người dùng. Tôi tự hỏi nếu có một cách để yêu cầu mật khẩu chỉ cho một số thay đổi.Thiết lập: chỉ yêu cầu mật khẩu cho các tình huống nhất định
Ví dụ, tôi muốn các mật khẩu để được yêu cầu khi:
- Xóa tài khoản
- Thay đổi mật khẩu
Và tôi muốn người dùng được tự do chỉnh sửa các lĩnh vực khác mà không bất kỳ mật khẩu nào, chẳng hạn như:
- Tên
- Tên đăng nhập
- Avatar
Vì vậy, tôi muốn một cách để trao đổi giữa hai phương pháp này. Làm sao tôi có thể giải quyết việc này?
EDIT:
Trong tài liệu hướng dẫn lập mưu của Tôi thấy điều này và nó hoạt động tốt, nó chỉ cho phép thay đổi mật khẩu và email nếu tôi nhập mật khẩu:
def update
@user = User.find(current_user.id)
successfully_updated = if needs_password?(@user, params)
@user.update_with_password(params[:user])
else
# remove the virtual current_password attribute update_without_password
# doesn't know how to ignore it
params[:user].delete(:current_password)
@user.update_without_password(params[:user])
end
if successfully_updated
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
private
# check if we need password to update user data
# ie if password or email was changed
# extend this as needed
def needs_password?(user, params)
user.email != params[:user][:email] ||
!params[:user][:password].blank?
#HERE
end
Bây giờ, những gì tôi có thể đưa vào #HERE
để cũng yêu cầu mật khẩu khi tôi xóa tài khoản?
bạn không thể thêm bất cứ thứ gì '# HERE' vì phương thức' update' không xóa người dùng, nó chỉ cập nhật thuộc tính người dùng. Bạn có thể muốn thêm cùng một loại công cụ vào phương thức 'hủy' trong bộ điều khiển – ted