Доступ к Facebook Connect FBML cookie через PyFacebook?
Вопрос
Возможно ли, войдя в систему с помощью кнопки Facebook Connect FBML, получить и использовать сведения о сеансе через PyFacebook ? Могу ли я использовать auth.getSession () таким же образом, как если бы я запустил вход через Python? Р>
В основном я пытаюсь разобраться, можно ли заменить этапы вплоть до raw_input () и включить его в приведенный ниже пример:
import facebook
API_KEY = 'xxx'
SECRET_KEY = 'xxx'
facebook = facebook.Facebook(API_KEY, SECRET_KEY)
facebook.auth.createToken()
facebook.login()
# Login to the window, then press enter
print 'After logging in, press enter...'
raw_input()
# This is where FBML button should get me
facebook.auth.getSession()
print 'Session Key: ', facebook.session_key
print 'Your UID: ', facebook.uid
Решение
Использование проверки страницы пользователя Facebook на вики-странице разработчика, которую я отслеживал вниз по методам PyFacebook getSession , validate_signature и getLoggedInUser , а также по коду, найденному в файле PyFacebook example.py для Django:
if 'session_key' in request.session and 'uid' in request.session:
fb.session_key = request.session['session_key']
fb.uid = request.session['uid']
else:
try:
fb.auth_token = request.GET['auth_token']
except KeyError:
# Send user to the Facebook to login
return HttpResponseRedirect(fb.get_login_url())
# getSession sets the session_key and uid
# Store these in the cookie so we don't have to get them again
fb.auth.getSession()
request.session['session_key'] = fb.session_key
request.session['uid'] = fb.uid
Получил следующий быстрый тест для работы Zope3 с помощью кнопки FBML:
import facebook
API_KEY = 'your_api_key'
SECRET_KEY = 'your_secret_key'
fb = odb.facebook.Facebook(API_KEY, SECRET_KEY)
fb_uid = self.request[API_KEY+'_user']
fb_session_key = self.request[API_KEY+'_session_key']
fb_ss = self.request[API_KEY+'_ss']
fb_signature = self.request[API_KEY] #no suffix for signature
fb.session_key = fb_session_key
fb.uid = fb_uid
fb.friends.get() # Results in list of friends
Другие советы
Я не уверен, что это ответит на ваш вопрос, и, по общему признанию, я мог бы ввести вас в заблуждение, потому что я новичок в этом (просто свернул свой собственный бэкэнд аутентификации на Facebook с помощью pyfacebook около 30 минут назад):
Сначала я установил промежуточное программное обеспечение pyfacebook (позволяя мне вызывать request.facebook в любом представлении):
'facebook.djangofb.FacebookMiddleware'
Затем я настроил представление с помощью кнопки подключения к Facebook и соответствующих настроек для перенаправления туда, куда мне нужно, после завершения авторизации.
В моем представлении «Выполнено подключение к Facebook» я выполняю проверку подлинности на Facebook с помощью файлов cookie подключения «Facebook», передав переменную запроса в request.facebook.check_session (). Если он возвращает True, объект готов к использованию для извлечения данных.
def myview(request):
fb = request.facebook
ready_to_rock = fb.check_session(request)
if ready_to_rock:
user_info = fb.users.getInfo([fb.uid],['first_name','last_name'])