Вход в систему с помощью omniauth-facebook "неопределенный метод`slice'для nil:NilClass"ошибка
У меня проблема с использованием omniauth-facebook. я попытался войти в мое приложение rails, используя facebook, но оно выдает мне ошибку, и env['omniauth.auth'] выдает nil-значение, здесь ошибка..
NoMethodError at /auth/facebook/callback
undefined method `slice' for nil:NilClass
вот моя модель
#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
а это мой контроллер
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
мои маршруты
root 'main#index'
get 'session/destroy' , to: 'session#destroy'
get 'auth/:provider/callback' => 'session#create'
2 ответа
Решение
Вы ошиблись в действии контроллера:
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
это переменные окружения не request.env
, этот ENV["omniauth.auth"]
вернуть nil
и это where(auth.slice(:provider, :uid))
пробующий ломтик nil
это повышение undefined method 'slice' for nil:NilClass
,
request.env не работает для меня. Я добавил callback_path к инициализатору omniauth, и теперь он работает. Вот как это выглядит:
omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, APP_ID, APP_SECRET, callback_path: '/auth/facebook/callback'
end