Я пытаюсь пройти аутентификацию через facebook и получаю следующее сообщение об ошибке
Koala::Facebook::AuthenticationError in AuthenticationsController#menu
type: OAuthException, code: 190, message: Malformed access token AQBiaE1v-pbSitzgNirHKSm7zNp3XoLAeHsvlFB626lARPBQCN98SBgIczjoRj3h8RQSVunm8gu-fHbO3H8-_9Ef9a5Lt00ixQ-wgum9p9FM5xN3WUvgc2BSyy1it2G4XlHNbQuwKYvsN-_7juH2NSXxMZmpaXh4qjjm13HWIjkYBWuyTIuJTJ7yUc97XixSMJtDbIIEBXfK52m_zIBTKvA4m8IoTOHDDoloeIhmARrGlMCmQG_vWZSMc.. (deleted the last characters by author) [HTTP 400]
Это код моего контроллера рельсов, который показывает ошибку. В принципе логин работает. но когда я пытаюсь получить доступ к своему профилю через @graph.get_object("me")
, токен не принимается.
class AuthenticationsController < ApplicationController
APP_ID="1234"
APP_SECRET="1234"
APP_CODE="XXXX"
SITE_URL="http://local.myapp.com:3000/"
def index
if session['access_token']
@face='Logged in -> <a href="authentications/logout">Logout</a>'
@graph = Koala::Facebook::API.new(session["access_token"])
else
@face='<a href="authentications/login">Login</a>'
end
end
def login
session['oauth'] = Koala::Facebook::OAuth.new(APP_ID, APP_SECRET, SITE_URL + 'authentications/callback')
redirect_to session['oauth'].url_for_oauth_code()
end
def logout
session['oauth'] = nil
session['access_token'] = nil
redirect_to '/'
end
def callback
session['access_token'] = params["code"]
redirect_to '/authentications/menu'
end
def menu
@ok="Hi!"
if session['access_token']
@face='Logged in -> <a href="/authentications/logout">Logout</a>'
@graph = Koala::Facebook::GraphAPI.new(session["access_token"])
## LEADS TO ERROR
@graph.get_object("me")
else
@face='<a href="/authentications/login">Login</a>'
end
end
end
И этот код из другого примера с использованием Sinatra работает.
#let Bundler handle all requires
require 'bundler'
require 'uri'
Bundler.require(:default)
# register your app at facebook to get those infos
APP_ID = 1234
APP_SECRET = '1234'
class SimpleRubyFacebookExample < Sinatra::Application
use Rack::Session::Cookie, secret: 'this_adfkaTGDGHDHJJJksk_0898932311_secret'
get '/' do
if session['access_token']
'You are logged in! <a href="/logout">Logout</a>'
@graph = Koala::Facebook::API.new(session["access_token"])
user = @graph.get_object("me")
feed = @graph.get_connections("me", "feed", {:limit => 999})
else
'Logout successful <br> Click to login <a href="/login">Login</a>'
end
end
get '/login' do
session['oauth'] = Koala::Facebook::OAuth.new(APP_ID, APP_SECRET, "#{request.base_url}/callback")
redirect session['oauth'].url_for_oauth_code( scope: "read_mailbox,read_stream")
end
get '/logout' do
session['oauth'] = nil
session['access_token'] = nil
redirect '/'
end
get '/callback' do
session['access_token'] = session['oauth'].get_access_token(params[:code])
redirect '/'
end
end
Я написал вывод в консоль, и все в порядке.
Это работает, когда я работаю с исправлением access_token, сгенерированным на сайте developments.facebook.com/tools/explorer, поэтому я, вероятно, получаю неправильный токен... но почему?