1
我有一個用戶使用Facebook登錄的Rails應用程序。我想將他們的一些Facebook數據保存到我的數據庫中,但我似乎無法訪問並保存我請求的額外信息。例如,我想獲得Facebook用戶的「關於我」信息,您可以通過從Facebook Graph API獲取權限,並可撥打bio
。從omniauth保存用戶的Facebook數據
我得到這個錯誤:
undefined method 'raw_info' for nil:NilClass
這裏是必要的代碼:
omniauth.rb
OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET'], scope: "email,publish_stream,user_about_me"
end
user.rb
class User < ActiveRecord::Base
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.username = auth.info.nickname
user.image = auth.info.image
user.email = auth.info.email
user.bio = auth.info.extra.raw_info.bio
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
def facebook
@facebook ||= Koala::Facebook::API.new(oauth_token)
block_given? ? yield(@facebook) : @facebook
rescue Koala::Facebook::APIError
logger.info e.to_s
nil
end
end
sessions_controller.rb
class SessionsController < ApplicationController
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to feed_path
end
def destroy
session[:user_id] = nil
redirect_to root_url
end
end
爲什麼我無法訪問該信息?
我回來刪除這個問題,因爲我剛剛意識到你的答案,我自己...我無意識地調用信息的額外散列,當它不是信息散列的一部分。傻我。 –
很好,你沒有刪除這個問題。否則,我不會偶然發現這個答案。 – Ameen