Ruby on rails Desive+Omniauth+Facebook
我跟随视频235和236设置OmniAuth w/Desive。我可以让一切正常工作,当我在authentications控制器中添加条件语句时,问题就来了。我收到以下错误: 身份验证控制器Facebook中的Nomethoder错误 用户:符号的未定义方法“to_key” 它似乎是在: sign_in_and_redirect(:user, authentication.user) 我在这里检查了其他答案,似乎没有一个答案。我找到了一个和Heroku有关的,但我在开发中得到了这个信息。任何帮助都将不胜感激 身份验证\u controller.rb def facebook 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 class RegistrationsController Devise::RegistrationsController def create super session[:omniauth] = nil unless @user.new_record? end private def build_resource(*args) super if session[:omniauth] @user.apply_omniauth(session[:omniauth]) @user.valid? end end end 注册\u controller.rb def facebook 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 class RegistrationsController Devise::RegistrationsController def create super session[:omniauth] = nil unless @user.new_record? end private def build_resource(*args) super if session[:omniauth] @user.apply_omniauth(session[:omniauth]) @user.valid? end end end routes.rb resources :authentications get '/auth/:provider/callback' => 'authentications#facebook' devise_for :users, :controllers => {:registrations => 'registrations', :omniauth_callbacks => 'authentications'} user.rb class User ActiveRecord::Base has_many :authentications # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable def apply_omniauth(omniauth) self.email = omniauth.info.email if email.blank? authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid']) end def password_required? (authentications.empty? || !password.blank?) && super end end 日志 改变 到Ruby on rails Desive+Omniauth+Facebook,ruby-on-rails,ruby,ruby-on-rails-3,devise,omniauth,Ruby On Rails,Ruby,Ruby On Rails 3,Devise,Omniauth,我跟随视频235和236设置OmniAuth w/Desive。我可以让一切正常工作,当我在authentications控制器中添加条件语句时,问题就来了。我收到以下错误: 身份验证控制器Facebook中的Nomethoder错误 用户:符号的未定义方法“to_key” 它似乎是在: sign_in_and_redirect(:user, authentication.user) 我在这里检查了其他答案,似乎没有一个答案。我找到了一个和Heroku有关的,但我在开发中得到了这个信息。任何帮助
问题在于散列格式。我改了: sign_in_and_redirect(:user, authentication.user.user_id)
这就解决了问题。我也查看了Desive和omniauth文档,但似乎找不到解决方案。更改导致了一个新错误:身份验证中的RuntimeError控件Facebook找不到有效的Nil映射。您可以共享为此错误生成的服务器日志吗。把它贴在问题上。 sign_in_and_redirect(:user, authentication.user.user_id)