如何在Python Flask中的#之后访问URL段?

时间:2013-09-11 23:30:05

标签: python oauth flask

我试图通过Python Flask支持OAuth2登录,所以我想处理一个如下所示的网址:

    http://myserver/loggedIn#accessToken=thisIsReallyImportant

但是当我处理回调时,它似乎只删除URL中的#后面的所有字符,其中包含重要的Oauth访问令牌。我如何获得此信息?它不包含在request.url

ETA:我可以使用Javascript中的window.location在客户端javascript中检索它,但是我必须将它传递回服务器,这感觉有点不错但是Oauth2可能要完成那样的?

2 个答案:

答案 0 :(得分:5)

来自RFC

  

片段标识符在信息检索中具有特殊作用    系统作为客户端间接引用的主要形式    [...]    片段标识符未在特定于方案中使用    处理URI;相反,片段标识符是分开的    来自解除引用之前的其余URI

因此,烧瓶会在'#'之后掉落所有东西。如果要将这些转发到服务器,则必须在客户端上提取它们,并通过查询参数或URL路径的一部分将它们传递给服务器。

答案 1 :(得分:2)

您正在使用不正确的OAuth 2授权类型(隐式授权)来执行您的操作。当您观察到javascript客户端使用时,隐式授权会在片段中提供令牌。还有另一种类型的授权代码,它类似但在URI查询中提供它,您可以从Flask访问它。

除了你为授权创建的重定向URI之外,你可以告诉两者,如果它有response_code =代码,你就是在正确的轨道上。您目前使用response_code = token。

如果您使用Facebook,请查看https://developers.facebook.com/docs/facebook-login/login-flow-for-web-no-jssdk/

对于Google,请查看https://developers.google.com/accounts/docs/OAuth2WebServer

您可能也对https://flask-oauthlib.readthedocs.org/en/latest/感兴趣,它可以帮助您使用OAuth。