联合身份验证的变通方法取决于域名?

时间:2012-12-06 22:11:27

标签: python google-app-engine openid google-openid

我在google应用引擎上有一个webapp,它使用以下代码检查用户是否已登录(通过联合ID)。我刚刚更改了域名,现在由于某种原因,它无法识别我当前的任何用户。这是因为openID会根据我通过一点测试找到的域名而改变。是否有任何解决方法或方法让这些用户登录?

user = users.get_current_user()
currentregistereduser = None
try:
    user_db_qry = User.query(User.theid == user.federated_identity())
    user_db_list = user_db_qry.fetch(1)
    currentregistereduser = user_db_list[0]

    # I go on here to do all of the stuff for a logged in user

#if the user does not exist yet
except IndexError:
    logging.error("indexerror" + str(User.theid) + " and " + str(user.federated_identity()))
    user_db = User(
        name=user.nickname(),
        email=user.email(),
        theid=user.federated_identity(),
        visits = 0,
        medals = 0,
        prestige = 1,
        )
    user_db.put()
    #they go on to create their profile data here
    self.redirect("/profile")

1 个答案:

答案 0 :(得分:3)

这似乎与StackExchange实现OpenID时面临的问题类似。你可以在这里看到他们如何处理它: http://blog.stackoverflow.com/2010/04/openid-one-year-later/

从该页面开始:

因此,我们的跨站点用户帐户匹配现在以这种方式运行:

  1. 按GUID匹配。这是我们在帐户关联期间生成和分配的内容,因此它是完美的指纹。

  2. 通过OpenID网址进行匹配。这适用于绝大多数OpenID提供商。

  3. 通过OpenID提供的电子邮件地址匹配...如果您使用我们的信任白名单。这适用于那些生成特定于域的标识符的稀有OpenID提供商(目前只有Google GMail)。

  4. 您也可以尝试使用OpenID库。这里列出了几个: http://openid.net/developers/libraries/

    希望这有帮助。