2013-07-23 2 views
7

Я использую разработать и файл взглядов /devise/registrations/edit.html.erb (я не сделал каких-либо изменений к нему):Я использую Devise, изменение пароля перенаправляется на главную страницу, как ее сохранить/редактировать/редактировать?

<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> 

Когда пользователь изменяет свой пароль, они перенаправляют на root_url (домашнюю страницу). Я хочу сохранить их на странице смены пароля, которая равна /users/edit. Как мне это сделать?

EDIT - У меня есть метод registration_controller с методом редактирования, что я должен добавить в него?

+0

Ваш код контроллера будет полезным. – vee

+0

@vinodadhikary - У меня есть register_controller с методом редактирования, что я должен добавить в него? – iCyborg

ответ

6

Во-первых, у ОП возникают проблемы с перенаправлением после смены пароля, смена пароля при разработке - RegistrationsController, а PasswordsController - для «Сбросить пароль». Ответ FYI @ amesee для перенаправления после сброса пароля. Изменение пароля и сброс пароля являются Дифференц

How To: Customize the redirect after a user edits their profile и посмотреть after_update_path_for(resource)

Вы должны добавить after_update_path_for(resource) метод на вашем registrations_controller.rb выглядит следующим образом:

class RegistrationsController < Devise::RegistrationsController 

    protected 

    def after_update_path_for(resource) 
     root_path 
    end 
end 
+0

Спасибо, отлично работал, просто интересно, почему мы пользуемся защитой? – iCyborg

+0

'after_update_path_for (resource)' не является общедоступным методом, предложение предотвратит доступ пользователя к фильтру как нормальное действие. –

+0

Спасибо, еще одна вещь, я не вижу флеш-сообщения, что пароль был обновлен? Я использую «edit_user_registration_path», и у меня есть «<% = devise_error_messages!%>» В edit.html.erb? – iCyborg

11

Действие update в PasswordsController вызывает защищенный метод с именем after_resetting_password_path_for.

Метод просто вызывает after_sign_in_path_for, поэтому я думаю, что он должен быть безопасным для подкласса PasswordsController и переопределить этот метод.

Похоже, что есть уже test, если этот метод переопределен, поэтому он определенно поддерживается.

0

Если у вас есть другая модель для пользователя и администратора, вам это нужно :

routes.rb

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

приложение/контроллеры/админов/registration_controller.rb

class Admins::RegistrationsController < Devise::RegistrationsController 
    def after_update_path_for(resource) 
    after_change_password_path # change this 
    end 
end 
Смежные вопросы