Rails 3 Разработать редирект в рамках собственной стратегии - PullRequest
2 голосов
/ 21 сентября 2011

Мои настройки: Rails 3.0.9, Ruby 1.9.2, Devise 1.3.4

Я реализовал собственную стратегию Devise / Warden для аутентификации по стороннему API, и в случае успеха новый пользователь создается с первого раза. Я должен уточнить, что создание пользователя выполняется в коде пользовательской стратегии в devise.rb

devise.rb
config.warden do |manager|
  manager.strategies.add(:mls_strategy) do
    def authenticate!
      ... authenticate against 3rd party API...
      if res.body =~ /success/
        u = User.find_or_initialize_by_email(params[:user][:email])
        if u.new_record?
          u.save
        end
      success!(u)
    end
  end
end

Это все работает, за исключением того, что при создании пользователь видит страницу входа с предупреждением Signed in successfully. Желаемое поведение заключается в том, что пользователь перенаправляется в корень приложения, что я пытался сделать, добавив redirect_to "/" после создания пользователя, но не смог найти метод redirect_to, и я даже не уверен, что это лучший способ сделать это. ,

Я также попытался добавить это к routes.rb, но безуспешно

namespace :user do
  root :to => "blah#index"
end

Предложения

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Argh, как оказалось, все что мне нужно сделать, это использовать save! вместо просто save.Очевидно, save! сохраняет его в базе данных, тогда как save задерживает его, в результате чего Devise не распознает пользователя как аутентифицированного.

0 голосов
/ 21 сентября 2011

Вам необходимо сделать новый контроллер «Регистрация» и настроить соответствующий метод:

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    '/an/example/path'
  end
end

Вы можете найти больше информации здесь: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-up-%28registration%29

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...