Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Desive+Omniauth+Facebook_Ruby On Rails_Ruby_Ruby On Rails 3_Devise_Omniauth - Fatal编程技术网

Ruby on rails Desive+Omniauth+Facebook

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有关的,但我在开发中得到了这个信息。任何帮助

我跟随视频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 日志

改变


问题在于散列格式。我改了:

sign_in_and_redirect(:user, authentication.user.user_id)
这就解决了问题。

我也查看了Desive和omniauth文档,但似乎找不到解决方案。更改导致了一个新错误:身份验证中的RuntimeError控件Facebook找不到有效的Nil映射。您可以共享为此错误生成的服务器日志吗。把它贴在问题上。 sign_in_and_redirect(:user, authentication.user.user_id)