【发布时间】:2013-08-03 11:56:28
【问题描述】:
我已按照本教程 (http://railscasts.com/episodes/236-omniauth-part-2) 使用 OmniAuth 和 Devise 创建 facebook 登录,但出现此错误:在我的 routes.rb 中自动加载常量用户时检测到循环依赖
devise_for :users , :controllers => {:registrations => 'registrations'}
registrations_controller.rb
Class RegistrationsController < Devise::RegistrationsController
def create
super
session[:omniauth] = nil unless @user.new_record?
end
private
def build_resource(*args)
super
if session["devise.omniauth"]
@user.apply_omniauth(session["devise.omniauth"])
session["devise.omniauth"] = nil
end
end
end
这是我从 AuthenticationsController 中创建的方法
def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(:user, authentication.user)
elsif current_user
current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid'])
flash[:notice] = "Authentication successful."
redirect_to authentications_url
else
user = User.new
user.apply_omniauth(omniauth)
if user.save
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(:user, user)
else
session[:omniauth] = omniauth.except('extra')
redirect_to new_user_registration_url
end
end
end
【问题讨论】:
-
你使用的是哪个版本的 rails / ruby?
-
rails 4.0.0.rc2 和 ruby 1.9.3p448
-
您能否提供完整的 stackstrace/errortrace 以便我们查明是哪个 gem 出现问题?
-
stacktraca 太长,无法放入评论
-
我打赌 :registrations => 'registrations' 是循环依赖的原因。你能检查一下吗? :registration 是什么意思?
标签: ruby-on-rails ruby devise rubygems omniauth