2013-07-23 18 views
7

Tôi đang sử dụng đưa ra và các tập tin quan điểm là /devise/registrations/edit.html.erb (Tôi đã không thực hiện bất kỳ thay đổi nào đó):Tôi đang sử dụng Devise, thay đổi mật khẩu sẽ chuyển hướng đến trang chủ, cách giữ nó trên/người dùng/chỉnh sửa?

<div><%= f.label :password %> 
<%= f.password_field :password, :autocomplete => "off" %></div> 

<div><%= f.label :password_confirmation %> 
<%= f.password_field :password_confirmation %></div> 

<% if f.object.encrypted_password.present? %> 
    <div><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br /> 
    <%= f.password_field :current_password %></div> 
<% end %> 
<div><%= f.submit "Update" %></div> 

Khi người dùng thay đổi mật khẩu của họ, họ sẽ nhận chuyển hướng đến root_url (trang chủ). Tôi muốn giữ chúng ở trang thay đổi mật khẩu, là /users/edit. Tôi làm nó như thế nào?

EDIT - Tôi có registration_controller với phương thức chỉnh sửa, tôi nên thêm gì vào đó?

+0

mã điều khiển của bạn sẽ có ích. – vee

+0

@vinodadhikary - Tôi có registration_controller với phương pháp chỉnh sửa, tôi nên thêm gì vào nó? – iCyborg

Trả lời

6

Trước tiên, OP có vấn đề về chuyển hướng sau khi thay đổi mật khẩu, thay đổi mật khẩu trong mục đích là trong RegistrationsController, trong khi PasswordsController cho "Đặt lại mật khẩu". Câu trả lời của FYI @ amesee cho chuyển hướng sau khi đặt lại mật khẩu. Thay đổi mật khẩu và thiết lập lại mật khẩu được differents

How To: Customize the redirect after a user edits their profile và xem after_update_path_for(resource)

Bạn nên thêm after_update_path_for(resource) phương pháp trên registrations_controller.rb của bạn trông giống như:

class RegistrationsController < Devise::RegistrationsController 

    protected 

    def after_update_path_for(resource) 
     root_path 
    end 
end 
+0

Cảm ơn bạn đã làm việc hoàn hảo, chỉ cần tự hỏi, tại sao chúng tôi đang sử dụng bảo vệ? – iCyborg

+0

'after_update_path_for (resource)' là phương thức phi công khai, mệnh đề sẽ ngăn người dùng truy cập vào bộ lọc như một hành động bình thường. –

+0

Cảm ơn, một điều nữa, tôi không thấy bất kỳ thông báo flash nào mà mật khẩu đã được cập nhật? Tôi đang sử dụng "edit_user_registration_path" và tôi có "<% = devise_error_messages!%>" Trong edit.html.erb? – iCyborg

11

Hành động update trong PasswordsController gọi phương thức được bảo vệ có tên after_resetting_password_path_for.

Phương pháp chỉ cần gọi số after_sign_in_path_for vì vậy tôi cho rằng nên an toàn để phân lớp PasswordsController và ghi đè phương thức này.

Có vẻ như đã có test vì phương pháp này bị ghi đè nên có vẻ như nó được hỗ trợ chắc chắn.

0

Nếu bạn có mô hình khác nhau cho người dùng và quản trị, bạn cần điều này :

các tuyến đường.rb

devise_for :admins, controllers: {registrations: 'admins/registrations'}, defaults: { format: 'html' } 

app/controllers/quản trị viên/registration_controller.rb

class Admins::RegistrationsController < Devise::RegistrationsController 
    def after_update_path_for(resource) 
    after_change_password_path # change this 
    end 
end 
Các vấn đề liên quan