Rails 3 и Devise: перенаправление на страницу после регистрации (подтверждается) - PullRequest
15 голосов
/ 28 марта 2011

У меня есть проект Rails 3 с Devise, подтверждающий включен, поэтому пользователь должен подтвердить свою учетную запись по электронной почте после регистрации. В настоящее время проект возвращает пользователя на страницу входа и выдает уведомление «Вы успешно зарегистрировались ...». Вместо этого я хочу перенаправить их на страницу «Спасибо» с дальнейшими инструкциями (проверьте свою электронную почту, папку со спамом, бла-бла).

Моя первая остановка была вики Devise, где я нашел эту страницу . Выглядело достаточно легко, я сделал следующие изменения и точно следовал инструкциям ...

/ приложение / контроллеры / registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
   protected
      def after_sign_up_path_for(resource)
        "http://google.com"
      end        
end

/ конфигурации / routes.rb

devise_for :users, :controllers => { :registrations => "registrations" }

Единственной модификацией, которую мне пришлось сделать в направлении, было перемещение папки "registrations" из папки / app / views / devise view в папку top / app / views, поскольку возвращалась ошибка, что представления теперь отсутствует. В любом случае, несмотря на то, что переопределение контроллера кажется работающим (я не думаю, что представления изначально были бы нарушены), эти указания НЕ работают ... страница игнорирует after_sign_up и возвращается к странице входа после регистрации.

Пошёл на охоту в интернете, включая другие потоки переполнения стека, но ничего из того, что я нашел, не помогло мне: либо ответы запутывают переадресацию при регистрации для входа в систему, либо то, что они на самом деле делают, это изменение перенаправления после входа ( как обычно, Devise автоматически регистрируется после регистрации без подтверждения).

Другие вещи, которые я пробовал ...

  1. Перемещение after_sign_up_path_for (ресурс) в контроллер приложения. Не работает Как ни странно, делать то же самое с after_sign_in_path_for (ресурс) и входить в систему как пользователь делает ДА ​​перенаправление.

  2. Перемещение registrations_controller.rb из / app / controllers / в папку / app / controllers / users и обновление всех маршрутов / ссылок / и т. Д. Соответственно. Не идти.

  3. Копирование Devise registrations_controller.rb в мой собственный registrations_controller.rb. Не сработало, просто выкинул ошибку и откатил все обратно.

  4. Я попробовал def after_inactive_sign_up_path_for (resource), поскольку я подумал, что, возможно, тот факт, что учетная запись еще не была активна, был виновником. Это также игнорируется.

  5. Стоит также упомянуть, что я попытался перезапустить свой проект после этих серьезных изменений, но ничего не происходит.

У кого-нибудь был успех с его подтверждением с включенным подтверждением?

Ответы [ 3 ]

14 голосов
/ 27 января 2012

Я просто помещаю комментарий Шеннона в ответ, чтобы его было легче найти.

Если вам требуется подтверждение по электронной почте после регистрации, ваш пользователь останется в промежуточном состоянии, в котором он зарегистрировался, но не щелкнул ссылку, отправленную ему по электронной почте, чтобы подтвердить свою учетную запись. Это неактивная регистрация. Для перенаправления в этой ситуации вам необходимо указать:

def after_inactive_sign_up_path_for(resource)
  "http://example.com"
end
11 голосов
/ 29 марта 2011

Какую версию устройства вы используете? Я почти уверен, что эта проблема была недавно решена , поэтому вам, вероятно, нужна последняя версия репозитория, которая все еще является кандидатом на релиз (хотя она должна быть выпущена в ближайшее время, так как они ожидают выхода omniauth 0.2) бета, которая недавно произошла).

Я использую Devise 1.2.rc2 из репозитория github с рельсами 3.0.5. Я добавил код, который вы упомянули, в свой пользовательский RegistrationsController и после создания новой учетной записи был перенаправлен в Google, как и ожидалось.

Урезанная версия моего RegistrationsController (в приложении / контроллеры / пользователи)

class Users::RegistrationsController < Devise::RegistrationsController
  protected
      def after_sign_up_path_for(resource)
        "http://google.com"
      end  

end

Моя запись маршрута. 1010 *

devise_for :users, :controllers => { :registrations => "users/registrations" }

Из моего Gemfile

gem 'devise', :git => "git://github.com/plataformatec/devise.git"

Дайте мне знать, если у вас проблемы с последней версией устройства.

1 голос
/ 06 февраля 2013

Другим способом было бы сделать это в контроллере приложения

def after_sign_in_path_for(resource)
  resource.sign_in_count <= 1 ? '/edit_profile' : root_path
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...