如何从重定向URL获取访问令牌

时间:2019-11-28 17:49:29

标签: python flask oauth spotify

我想从access token获得一个Spotify。我从Spotify那里得到了一些东西:

  

https://example.com/callback#access_token=NwAExz...BV3O2Tk&token_type=Bearer&expires_in=3600&state=123

我在地址栏中看到了它。其中https://example.com/callback是我的网站,access_token需要价值。如何获得?

我曾这样尝试过,但得到了None

print(flask.request.args.get('access_token'))

完整代码

import flask 
app = flask.Flask(__name__)

@app.route("/")
def render_index():
    return flask.render_template('index.html')

@app.route("/redirect_spotify_token", methods = ['POST'])
def redirect_spotify_token():
    return flask.redirect('https://accounts.spotify.com/authorize?...')

@app.route("/callback/spotify_token", methods = ['POST', 'GET'])
def callback_token():
  #
  # how to get access token?
  #
  return 'ok'

if __name__ == "__main__":
  app.run(host='0.0.0.0', port=8080) 

1 个答案:

答案 0 :(得分:0)

我通过服务repl.it完成我的项目。也许这就是为什么我无法读取请求的args

flask.request.args.get('access_token')

解决方案

从Spotify重定向到/callback_token。在这种情况下,函数arg tokenNone。我的页面callback_token.html是解析网址,并使用callback_token()重定向到token

main.py

@app.route("/callback_token")
@app.route("/callback_token/<token>")
def callback_token(token=None):
    if token is None:
      return render_template('callback_token.html')
    else:
      #logic with token
      return redirect(url_for('index'))

callback_token.html 和javascript

var parsedHash = new URLSearchParams(
    window.location.hash.substr(1)
);
location.href = `your_url.com/callback_token/${parsedHash.get('access_token')}`