RPX, OpenID - Как написать правильный обработчик входа в AppEngine - PullRequest
1 голос
/ 27 января 2010

Я потратил несколько дней на поиск в Интернете, и я рисую бланк - я тоже новичок в python! Я просто хочу интегрировать RPX (janrain) в Appengine - загружать код для вставки скриптов и возвращать токен openid - это все здорово - но кроме этого никто, кажется, не продвигается дальше, как при создании openid Логин, который работает - почему? я предполагаю, что нет управления сессиями?

Вот простой обработчик класса, который получает TOKEN для открытого идентификатора, а затем делает выборку, чтобы получить профиль пользователя. Все очень просто с помощью RPX.

простой обработчик для получения ответа от RPX

class RPXHandler(webapp.RequestHandler):
  def get(self):
    token = self.request.get('token')
    url = 'https://rpxnow.com/api/v2/auth_info'
    args = {
      'format': 'json',
      'apiKey': '#YOUR KEY#',
      'token': token
      }
    r = urlfetch.fetch(url=url,
                       payload=urllib.urlencode(args),
                       method=urlfetch.POST,
                       headers={'Content-Type':'application/x-www-form-urlencoded'}
                       )
json = simplejson.loads(r.content)

logging.info(json)

if json['stat'] == 'ok':    
  unique_identifier = json['profile']['identifier']
  nickname = json['profile']['preferredUsername']
  email = json['profile']['email']


  # log the user in using the unique_identifier
  # this should your cookies or session you already have implemented


  self.redirect('static/loggedin.html')
  else:
  self.redirect('static/error.html')  

Теперь # здесь начинается проблема - в идеале мы можем быть ленивыми и просто войти в них в учетные записи Google - но это не метод входа пользователя в систему, т. Е.

user.login (электронная почта)

так что отпадает всякая надежда на использование учетных записей Google - и если честно, если у нас есть открытый идентификатор - зачем?

SO ...

Что мне нужно, так это мое собственное хранилище данных пользователя - это просто - и некоторые средства определения, вошел ли пользователь в систему - сеансы? Но в AppEngine их нет для поддержки сессий.

Я нашел несколько библиотек классов, в которых говорится, что они имеют дело с этим, но все это выглядит плохо документировано и без хороших примеров кода

Может кто-нибудь помочь?

Ответы [ 2 ]

1 голос
/ 28 января 2010

GAE дает вам доступ к базе данных, верно? Создайте безопасный токен и сохраните его с URL-адресом пользователя, возвращаемым RPX, в базе данных. Установите безопасный токен как cookie, чтобы получать его при каждом запросе - найдите токен в базе данных и сделайте все остальное.

Хотя я беспокоюсь о производительности, на самом деле она работает довольно хорошо для меня.

0 голосов
/ 28 января 2010
...