OMNIAUTH предоставляет простые крючки на график Facebook API?
-
25-09-2019 - |
Вопрос
Я работаю над интеграцией Omniauth с моим новым приложением Facebook, и я смотрю на довольно редкую документацию, чтобы понять, дает ли оно простые способы доступа к графику API ... Я переезжаю из коалы, которая была довольно проста.
У кого-нибудь еще есть Omniauth для этого? Я хочу получить фотографии с альбомов пользователей и сортировать и получать уникальные URL для них.
Решение 4
Поэтому я не смог получить FB_Graph работать правильно - я все еще нуб, будучи рубином на рельсы-разработчикам на общую сумму около 8-10 недель, и поэтому не имеет инстинса того, что должно быть очевидными проблемами другие люди.
Однако я нашел этот великолепный пункт блога, который описывает простой клиент Facebook и честно показывает, как все это подключается вместе. Я нашел проблему с этим, поднимая объект Me / Picture, поскольку Facebook возвращает http302, а не http200, но это было легко обработано с помощью автора. Проверьте это: http://bnerd.de/misc/ruby-write-basic-client-forfacebook-graph-api/
Сейчас я использую Omniauth для простоты взаимодействия входа в систему / регистрацию на основе этого прохождения здесь: blog.railsrummable.com/blog/2010/10/08/intridea-omniauth и с токеном, которого я получаю от этого, я использую это просто FBClient из ссылки BNED выше для доступа к графику API. Надеюсь, что я нашел, помогает другим.
... вот моя версия кода BNED и работала для меня:
class FBClient
def initialize(app, access_token = nil)
@app = app
@access_token = access_token
end
# request permission(s) from user
def request(perms)
#create a random verifier to identify user on fb callback
verifier = (0...10).map{65.+(rand(25)).chr}.join
uri = "https://graph.facebook.com/oauth/authorize?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&scope=#{perms}"
request = { :verifier => verifier, :uri => uri }
return request
end
def connect(code, verifier)
uri = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&client_secret=#{@app.secret}&code=#{CGI::escape(code)}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.path + "?" + uri.query)
response = http.request(request)
data = response.body
return data.split("=")[1]
end
# get, post
def get(path, params = nil)
uri = URI.parse("https://graph.facebook.com/" + path)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
if params.nil?
params = Hash.new
end
if params["access_token"].nil?
params["access_token"] = @access_token unless @access_token.nil?
end
request = Net::HTTP::Get.new(uri.path)
request.set_form_data( params )
request = Net::HTTP::Get.new(uri.path + "?" + request.body)
return response = http.request(request)
end
def post(path, params = nil)
uri = URI.parse("https://graph.facebook.com/" + path)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
if params.nil?
params = Hash.new
end
if params[:access_token].nil?
params[:access_token] = @access_token unless @access_token.nil?
end
request = Net::HTTP::Post.new(uri.path)
request.set_form_data( params )
request = Net::HTTP::Post.new(uri.path + "?" + request.body)
response = http.request(request)
response.code == "200" ? feed = JSON.parse(response.body) : raise("Sorry, an error occured. #{response.body}")
return feed
end
end
Я уверен, что кто-то более опытный, чем я мог бы улучшить это - мне было около 10 недель в изучении Ruby (и мое первое программирование, поскольку Fortran и Pascal в университете в начале 90-х годов!).
Другие советы
Я наконец узнал:
1) включить этот драгоценный камень
2) Используйте GEM:
user = FbGraph::User.new('me', :access_token => session[:omniauth]["credentials"]["token"])
user.fetch
3) Получить вашу информациюuser.name
Помните, что вы можете получить что-нибудь отсюда TTP: //developers.facebook.com/docs/reference/api/user
Еще один хороший вариант - коала: https://github.com/arsduo/koala
Если вы просто используете Facebook, Koala имеет свою собственную поддержку OAuth. Это также отлично работает с Omniauth. Чтобы использовать их вместе, настроить Omniauth на этот железнодорожный пост:http://railscasts.com/episodes/235-omniauth-part-1.
Затем добавьте столбец токена в таблицу «аутентификации» и любые способы поддержки для извлечения токенов. Когда приложение необходимо взаимодействовать с Facebook, пусть Koala захватит токен и сделаю свою вещь. В контроллере:
if @token = current_user.facebook_token
@graph = Koala::Facebook::GraphAPI.new(@token)
@friends = @graph.get_connections("me", "friends")
end
Во-первых, я бы пошел на fb_graph, просто сравнить:
с участием коала:
graph = Koala::Facebook::GraphAPI.new OAUTH_ACCESS_TOKEN
friends = graph.get_connections("me", "friends")
graph.put_object("me", "feed", :message => "I am writing on my wall!")
с участием fb_graph.:
me = FbGraph::User.me OAUTH_ACCESS_TOKEN
my_friends = me.friends
me.feed! :message => "I am writing on my wall!"
Когда используешь Омниаут, У каждого пользователя много разрешений (Facebook, Twitter, ...)
Для каждого авторизации пользователей вы должны хранить OAuth токен Это возвращено в вашем обратном вызове OAUTH.
auth = Authorization.create!(:user => user,
:uid => hash['uid'],
:provider => hash['provider'],
:token => hash['credentials']['token'])
Тогда куда вы хотите получить доступ к альбомам и фотографиям, сделать что-то подобное:
class User
...
has_many :authorizations
...
def grap_facebook_albums
facebook = authorizations.where(:provider => :facebook).first
fb_user = ::FbGraph::User.fetch facebook.uid, :access_token => facebook.token
fb_albums = fb_user.albums
end
...
end
У меня также были проблемы, получающие разрабатывающее решение Omniauth для работы. Мне пришлось проблемы:
- Сеанс Cookie не хранил токен аутентификации Facebook, который необходимо инициализировать FB_GRAPH и KOALA.
- Я не смог инициализировать FB_GRAPH после получения токена аутентификации Facebook (но получил коала для работы после некоторой работы).
Я решел # 1, вставляя «сеанс [: Omniauth] = Omniauth» в метод создания аутентификаций_Controller.RB.
Я решил # 2 с помощью коалы. Похоже, FB_GRAPH требуется OAUTH2, а разработчик интеграции Omniauth использует OAuth. Koala отлично работает с токеном аутентификации Facebook, хранящимся сеансом [: Omniauth] [«Учетные данные»] [«токен»].
Вы инициализируете Koala, как это:
- @fbprofile = Koala :: Facebook :: Grafapi.new (сессия [: Omniauth] [«Учетные данные»] [«токен»])
Я убедился, что OAUTH и OAUTH2 были удалены, а затем я установил OAUTH2. Похоже, что сейчас Omniauth и FB_Graph работают ... Но, вероятно, нужно проверить его больше.