Проблема, о которой вы уже знаете, заключается в том, что fb_access_token доступен только в текущем сеансе и не доступен для Коалы.
Есть ли в вашей пользовательской модели столбец для хранения "токена"? Если нет, то убедитесь, что у вас есть этот столбец в пользовательской модели. Когда у вас есть этот столбец в пользовательской модели, вам нужно будет что-то сохранить в нем во время создания пользователя (метод create_with_omniauth в классе User). После успешной авторизации на Facebook вы должны обнаружить, что поле токена заполнено маркером oauth facebook. Если он заполнен, то ваш код Koala должен работать. В этом случае нет необходимости хранить учетные данные Facebook в сеансе.
Если, однако, вы не получаете автономный доступ от Facebook (что означает, что доступ предоставляется только на короткое время, то сохранение учетных данных facebook в сеансе имеет смысл. В этом случае вам не следует использовать «current_user.token», но сеанс ["fb_auth_token"] вместо этого с коалой.
Надеюсь, это поможет!
Так что, если вы хотите автономный доступ (долгосрочное хранение авторизации на Facebook), измените код своей модели, чтобы хранить fb_auth_token, как показано ниже
# User model
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["user_info"]["name"]
user.token = auth['credentials']['token']
end
end
# SessionsController
def create
auth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
# Note i've also passed the omniauth object
session[:user_id] = user.id
session['fb_auth'] = auth
session['fb_access_token'] = auth['credentials']['token']
session['fb_error'] = nil
redirect_to root_url
end
Если у вас есть краткосрочный доступ, измените «другой» контроллер на использование сессий
# The other controller
def whateverthissactionis
@friends = Array.new
if session["fb_access_token"].present?
graph = Koala::Facebook::GraphAPI.new(session["fb_access_token"]) # Note that i'm using session here
@profile_image = graph.get_picture("me")
@fbprofile = graph.get_object("me")
@friends = graph.get_connections("me", "friends")
end
end