2013-09-29 93 views
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 

爲什麼我無法訪問該信息?

回答

1

需要看看哈希,看看「生物」是的,但我的身份驗證哈希

auth.info.extra.raw_info 

不存在 - 我有

auth.extra.raw_info.bio 

我倒是輸出也許用Rails.logger.info(auth)可以更好地查看所有的部分。

+0

我回來刪除這個問題,因爲我剛剛意識到你的答案,我自己...我無意識地調用信息的額外散列,當它不是信息散列的一部分。傻我。 –

+2

很好,你沒有刪除這個問題。否則,我不會偶然發現這個答案。 – Ameen