类型错误:使用 Base 64 时,“模块”对象不可调用

问题描述 投票:0回答:1

我正在使用 Spotify API,但出现时间错误

TypeError: 'module' object is not callable

特别是我的代码中处理授权流程的部分

def get_info(code):
    auth_string = f'{os.getenv("Spotify_Client_ID")}:{os.getenv("Spotify_Client_Secret")}'
    auth_bytes = auth_string.encode('utf-8')
    auth_base64 = str(base64(auth_bytes), 'utf-8')

@app.route('/callback')
@cross_origin()
def getToken(): 
  print("INSIDE CALLBACK *****")
  code = request.args.get('code')

  if code:
        access_token, refresh_token , expires_in = get_info(code)
        if access_token:
            return f"Authentication successful! Access Token: {access_token}"
        else:
            return "Failed to obtain access token."
  else: 
   return "Authorization code not found in callback request."
  

我尝试将授权格式化的方式更改为base64.b64encode(auth_bytes).decode('utf-8'),但这不起作用

python oauth-2.0 base64 spotify
1个回答
0
投票

使用“OAuth2Session”而不是“base64” 处理基本授权要容易得多。

演示代码

from flask import Flask, request, redirect
from requests_oauthlib import OAuth2Session
from requests.auth import HTTPBasicAuth
import requests

app = Flask(__name__)

AUTH_URL = 'https://accounts.spotify.com/authorize'
TOKEN_URL = 'https://accounts.spotify.com/api/token'
PORT = 3000
REDIRECT_URI = f'http://localhost:{PORT}/callback' # my case is 'http://localhost:3000/callback'
CLIENT_ID = "<your client id>"
CLIENT_SECRET = "<your client secret>"
SCOPE = [
    "user-read-email",
    "playlist-read-collaborative"
]

@app.route("/login")
def login():
    spotify = OAuth2Session(CLIENT_ID, scope=SCOPE, redirect_uri=REDIRECT_URI)
    authorization_url, state = spotify.authorization_url(AUTH_URL)
    return redirect(authorization_url)

def get_info(code):
    res = requests.post(TOKEN_URL,
        auth = HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET),
        data = {
            'grant_type': 'authorization_code',
            'code': code,
            'redirect_uri': REDIRECT_URI
        })
    data = res.json()
    return data['access_token'], data['refresh_token'], data['expires_in']

@app.route("/callback", methods=['GET'])
def getToken():
    print("INSIDE CALLBACK *****")
    code = request.args.get('code')
    if code:
        access_token, refresh_token , expires_in = get_info(code)
        if access_token:
            return f"Authentication successful! Access Token: {access_token}"
        else:
            return "Failed to obtain access token."
    else: 
        return "Authorization code not found in callback request."
if __name__ == '__main__':
    app.run(port=PORT,debug=True)

运行它

python get-token.py

浏览器登录

http://localhost:3000/login

结果

© www.soinside.com 2019 - 2024. All rights reserved.