使用Flask和rauth时,如何坚持使用Facebook访问令牌?

时间:2013-04-19 10:32:24

标签: python facebook oauth flask rauth

当我向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中不存在。也许烧瓶遇到#字符有问题?如何访问该查询参数?

这是我的代码的相关部分(源自rauth facebook-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

    ...

2 个答案:

答案 0 :(得分:1)

如果您按照Facebook Flask example并使用代码响应,则无需任何JavaScript。事实上,一般而言,这不是OAuth消费者的要求。

答案 1 :(得分:0)

标记为'#'的URI部分称为片段标识符。它不会传输到服务器,只能通过JS在客户端进行处理。