【问题标题】:How can I persist Facebook access tokens when using Flask and rauth?使用 Flask 和 rauth 时如何保留 Facebook 访问令牌?
【发布时间】:2013-04-12 17:29:25
【问题描述】:

当我向 facebook 执行 get_authorize_url 请求时,我被重定向到以下 URL(在浏览器中看到):

http://127.0.0.1:5000/#access_token=sdfsdfasfaf&expires_in=5849

但我无法在flask 中获取此access_token:它不在request.args 中,不在request.query_string 中,甚至在request.url 中也不存在。也许烧瓶遇到# 字符的问题?如何访问该查询参数?

这是我代码的相关部分(源自rauthfacebook-cli example):

# rauth OAuth 2.0 service wrapper
graph_url = 'https://graph.facebook.com/'
facebook = OAuth2Service(name='facebook',
                         authorize_url='https://www.facebook.com/dialog/oauth',
                         access_token_url=graph_url + 'oauth/access_token',
                         client_id=app.config['FB_CLIENT_ID'],
                         client_secret=app.config['FB_CLIENT_SECRET'],
                         base_url=graph_url)

...

@app.route('/facebook/login')
def login():
    redirect_uri = url_for('authorized', _external=True)
    params = {'scope': 'read_stream',
              'response_type': 'token',
              'redirect_uri': redirect_uri}
    return redirect(facebook.get_authorize_url(**params))

@app.route('/facebook/authorized')
def authorized():
    # I am not able to find the access_token
    print dir(request)
    print request.args
    print request.query_string
    print request.url

    ...

【问题讨论】:

  • 我强烈建议使用response_type code 而不是token,因为前者的流程往往更适合在命令行示例脚本中使用后者流程的Web 应用程序。 (请注意,cli 示例不打算用作网络应用程序的模型!)

标签: python facebook oauth flask rauth


【解决方案1】:

如果您关注Facebook Flask example 并使用代码响应,则无需任何 JavaScript。事实上,通常这不是 OAuth 消费者的要求。

【讨论】:

  • 对。但是 facebook 示例一直在执行授权请求。我想以某种方式“保存”access_token 以供将来使用,这样用户就不需要在每次我想向 facebook API 发送请求时授权我的应用程序。
  • 您可以通过访问会话实例上的令牌来执行此操作,如下所示:session.access_token。然后将这些数据保存在安全的地方。
【解决方案2】:

URI 中以“#”标记的部分称为片段标识符。不传到服务端,只能在客户端处理,比如JS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2018-09-07
    相关资源
    最近更新 更多