我想为网络应用实施Facebook登录。我需要的只是用户创建帐户的基本公共信息。
这就是我所做的:
APP_ID
中的APP_SECRET
和Koala
获取access_token
。graph.get_object('me')
是登录用户的名字和id
(它看起来不像默认的Facebook ID)。< / LI>
access_token
在控制台中测试了gem(默认情况下启用了所有权限)。我使用相同的方法调用获取所有数据。知道为什么会这样吗?看来我遗漏了一些明显的东西。该代码在Github中提供。但这几乎是它的一切:
require 'bundler'
Bundler.require :default
Dotenv.load '.env'
require_relative './app/constants.rb'
module Banana
class App < Sinatra::Base
use Rack::Session::Cookie, secret: COOKIE_SECRET
set :public_folder, File.dirname(__FILE__) + '/bower_components'
get '/' do
if logged_in?
haml :welcome_in, layout: :layout
else
haml :log_in, layout: :layout
end
end
get '/log_out' do
session['oauth'] = nil
session['access_token'] = nil
redirect '/'
end
get '/log_in' do
session['oauth'] = Koala::Facebook::OAuth.new(APP_ID, APP_SECRET, "#{request.base_url}/call_back")
redirect session['oauth'].url_for_oauth_code()
end
get '/call_back' do
begin
session['access_token'] = session['oauth'].get_access_token(params[:code])
rescue
redirect '/?error=user_denied'
end
redirect '/'
end
get '/test' do
if logged_in?
p graph.get_object("rakeshbs")
"e"
else
redirect '/'
end
end
def logged_in?
!session['access_token'].nil?
end
def toggle_access
logged_in? ? '/log_out' : '/log_in'
end
def graph
@graph ||= Koala::Facebook::API.new(session['access_token'])
end
def errored?
!params["error"].nil?
end
def user
p graph.get_connections(:me, :photos) # This is just nil
@user ||= OpenStruct.new(
name: graph.get_object("me")["name"], # All I get here is just a hash with the name and an id!
photo: 'http://semantic-ui.com/images/avatar/small/elliot.jpg'
)
end
end
end
答案 0 :(得分:2)
您应该添加fields
参数。
这样的事情:
graph.get_object('me', { fields: 'id,first_name,last_name,gender,birthday,photos,email' })