Python RPX,OpenID-如何为AppEngine编写适当的登录处理程序

Python RPX,OpenID-如何为AppEngine编写适当的登录处理程序,python,google-app-engine,openid,rpx,Python,Google App Engine,Openid,Rpx,我花了好几天的时间在网上搜索,我画了一个空白——我也是python新手!我只是想将RPX(janrain)集成到Appengine中—为脚本插入和返回openid令牌加载代码—这一切都很好—但除此之外,似乎没有人在实际创建有效的openid登录时更进一步—为什么?我假设没有会话管理 下面是一个简单的类处理程序,它获取开放id的令牌,然后进行获取以获取用户配置文件。使用RPX非常简单 从RPX获取响应的简单处理程序 现在#问题就从这里开始了——理想情况下,我们可以懒散地把他们登录到谷歌账户——但他

我花了好几天的时间在网上搜索,我画了一个空白——我也是python新手!我只是想将RPX(janrain)集成到Appengine中—为脚本插入和返回openid令牌加载代码—这一切都很好—但除此之外,似乎没有人在实际创建有效的openid登录时更进一步—为什么?我假设没有会话管理

下面是一个简单的类处理程序,它获取开放id的令牌,然后进行获取以获取用户配置文件。使用RPX非常简单

从RPX获取响应的简单处理程序 现在#问题就从这里开始了——理想情况下,我们可以懒散地把他们登录到谷歌账户——但他们没有办法让用户登录ie

用户登录(电子邮件)

所以,这就放弃了使用谷歌账户的任何希望——公平地说,如果我们有开放的id——何必麻烦呢

所以

我需要的是我自己的用户数据存储-这很简单-和一些识别用户是否登录的方法-会话?但在AppEngine中,他们不支持会话

我发现了一些类库,它们说它们可以处理这个问题,但这些类库看起来都没有很好的文档记录,也没有很好的代码示例


有人能帮忙吗?

有一个GAE食谱应该会有帮助


有一个GAE配方应该会有所帮助


GAE允许您访问数据库,对吗?生成一个安全令牌,并将其与RPX返回的用户URL一起存储在数据库中。将安全令牌设置为cookie,以便在每次请求时都能获得它-在数据库中查找令牌,然后从那里执行其余操作


虽然我担心性能,但实际上它对我来说运行得很好。

GAE允许您访问数据库,对吗?生成一个安全令牌,并将其与RPX返回的用户URL一起存储在数据库中。将安全令牌设置为cookie,以便在每次请求时都能获得它-在数据库中查找令牌,然后从那里执行其余操作


虽然我担心性能,但实际上对我来说效果很好。

你不应该使用所有的大写字母-即使是标题-看起来你在大喊大叫。你不应该使用所有大写字母-即使是标题-看起来你在大喊大叫。
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')