我的设置: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
建议?
答案 0 :(得分:2)
Argh,事实证明,我需要做的就是使用save!
而不仅仅是save
。显然save!
会将其持久存储到数据库中,而save
会延迟它,导致Devise无法将用户识别为已通过身份验证。
答案 1 :(得分:0)
您需要制作一个新的控制器“注册”并自定义适当的方法:
class RegistrationsController < Devise::RegistrationsController
protected
def after_sign_up_path_for(resource)
'/an/example/path'
end
end