连接方法 Python

3
我目前正在使用Oauth让用户通过Foursquare登录,然后为该用户创建一个新会话。如果用户是系统中的新用户,则要求他们通过Hunch进行登录,这可以基于两个系统的信息生成用户配置文件。我已经让他们分别登录到每个应用程序中,但是如何将登录到Foursquare的用户与登录到Hunch的用户关联起来呢? 我的想法是在用户模型中创建对会话ID的引用,或者将会话ID用作Hunch登录的参数,但我不确定这是否是最好的方法。是否有其他方式可以创建关联?
2个回答

0

您可以创建一个父关联,使得SiteUser成为FoursquareAuthHunchAuth的父级。

当用户首次使用Foursquare登录时,您需要创建SiteUser模型,然后使用parent=just_created_user创建FoursquareAuth模型。然后,当您将用户发送到Hunch进行身份验证时,您需要在回调参数中包含用户ID或会话ID。当回调发生时,您可以获取用户的密钥,并使用parent=previously_created_user创建HunchAuth

SiteUser模型包含来自两个来源的组合信息(名称、位置、最后签到等)。*Auth模型仅包含每个提供程序提供的任何保证唯一标识符(user_id、access_token等)。

这样,如果您拥有用户对象,则可以使用祖先过滤器查找Foursquare或Hunch身份验证数据,并且可以通过加载任何*Auth模型并获取其parent()来查找用户。

(注:我将模型称为SiteUser,以避免与App Engine中可用的User对象混淆)

0

最简单的方法是按照以下步骤进行:

  1. 将用户发送到foursquare进行登录
  2. 当用户返回时,在数据存储中为他们创建一条记录。
  3. 将用户发送到Hunch进行登录,但在继续URL中包含您在第2步中创建的记录的ID。
  4. 当用户返回时,使用嵌入在URL中的ID将用户的Hunch信息添加到其用户记录中。

我试图在继续URL中添加ID,但这会导致失败,例如我的重定向到Hunch是http://hunch.com/authorize/v1/?app_id=111&next=http://localhost:8086/?access_token={{access_token}}/返回的URL是http://localhost:8086/?access_token=aaa?auth_token_key=aaa&user_id=aa&next=http%3A%2F%2Flocalhost%3A8086%2F%3Faccess_token%qq%2F但解析时无法找到auth_token_key。 - qwop
@qwop,听起来hunch没有正确编码URL。你尝试过以另一种方式传递它吗?例如,作为URL的一部分?例如,http://foo.com/auth/user_id? - Nick Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接