我已经遵循这个教程(
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