简体   繁体   English

使用omniauth-facebook登录“ nil:NilClass的未定义方法'slice'”错误

[英]login using omniauth-facebook “undefined method `slice' for nil:NilClass” error

i have a problem using omniauth-facebook. 我在使用omniauth-facebook时遇到问题。 i tried to login in my rails app using facebook but its giving me an error and the env['omniauth.auth'] is throwing a nil value here is the error.. 我试图使用Facebook登录我的Rails应用程序,但它给了我一个错误,并且env ['omniauth.auth']抛出nil值,这是错误。

 NoMethodError at /auth/facebook/callback
 undefined method `slice' for nil:NilClass

here is my model 这是我的模特

#fields
  field :provider
  field :uid
  field :name
  field :oauth_token 
  field :oauth_expires_at , type: DateTime

  #functions
  def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).find_or_initialize_by.tap do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.oauth_token = auth.credentials.token
      user.oauth_expires_at = Time.at(auth.credentials.expires_at)
      user.save!
    end
  end

and this is my controller 这是我的控制器

  def create
    user = Usersfb.from_omniauth(ENV["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_url
  end
  def destroy
    session[:user_id] = nil
    redirect_to root_url
  end

my routes.rb 我的routes.rb

  root 'main#index'
  get 'session/destroy' , to: 'session#destroy'
  get 'auth/:provider/callback' => 'session#create'

request.env didn't work for me. request.env不适用于我。 I added callback_path to omniauth initializer and it works now. 我向omniauth初始化程序添加了callback_path,并且现在可以正常工作。 Here's how it looks like: 看起来是这样的:

omniauth.rb omn​​iauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, APP_ID, APP_SECRET, callback_path: '/auth/facebook/callback'
end

You have mistake in controller action: 您在控制器操作中有错误:

def create
  #user = Usersfb.from_omniauth(ENV["omniauth.auth"])
  user = Usersfb.from_omniauth(request.env["omniauth.auth"])
  session[:user_id] = user.id
  redirect_to root_url
end

ENV it is environment variables not request.env , this ENV["omniauth.auth"] return nil and this where(auth.slice(:provider, :uid)) trying slice nil that raise undefined method 'slice' for nil:NilClass . ENV是环境变量而不是request.env ,此ENV["omniauth.auth"]返回nilwhere(auth.slice(:provider, :uid))尝试切片nilundefined method 'slice' for nil:NilClass引发undefined method 'slice' for nil:NilClass

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 用于nil:NilClass的Omniauth-facebook未定义方法“切片”。 SessionsController#create中的NoMethodError - Omniauth-facebook undefined method `slice' for nil:NilClass. NoMethodError in SessionsController#create Omniauth-facebook Devise Rspec,未定义的方法`extra'代表nil:NilClass - Omniauth-facebook Devise Rspec, undefined method `extra' for nil:NilClass 使用 omniauth-facebook 登录 facebook 时执行过期错误 - Execution expired error with facebook login, using omniauth-facebook 使用Devise和Omniauth进行Rails社交登录(Facebook)-未定义的方法“是否坚持?” 对于nil:NilClass - Rails social login ( Facebook) with Devise and Omniauth - undefined method `persisted?' for nil:NilClass nil的未定义方法“ provider”:NilClass,RSpec,OmniAuth - undefined method `provider' for nil:NilClass, RSpec, OmniAuth Omniauth无法正常工作:未定义的方法“是否持续?” 对于nil:NilClass - Omniauth not working: undefined method `persisted?' for nil:NilClass OmniAuth 1.1:nil的未定义方法`info':NilClass - OmniAuth 1.1: undefined method `info' for nil:NilClass Omniauth-facebook登录无法正常工作 - Omniauth-facebook login not working Facebook登录w / Devise&Omniauth-Facebook有CORS错误? - Facebook Login w/ Devise & Omniauth-Facebook has CORS Error? Facebook使用omniauth-facebook gem登录Ruby on Rails - Facebook login with Ruby on Rails using omniauth-facebook gem
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM