У меня есть небольшое приложение Flask, которое позволяет пользователям Spotify проходить аутентификацию на домашней странице. Вход в систему и доступ к токенам et c работают нормально и работают следующим образом. Я получаю ответ http 302 для /spotify_authentication
точки обзора, и он перенаправляет меня на /spotify
правильно.
# Client Keys
CLIENT_ID = "##"
CLIENT_SECRET = "##"
# Spotify URLS
SPOTIFY_AUTH_URL = "https://accounts.spotify.com/authorize"
SPOTIFY_TOKEN_URL = "https://accounts.spotify.com/api/token"
SPOTIFY_API_BASE_URL = "https://api.spotify.com"
API_VERSION = "v1"
SPOTIFY_API_URL = "{}/{}".format(SPOTIFY_API_BASE_URL, API_VERSION)
CLIENT_SIDE_URL = "http://127.0.0.1:5000/spotify"
REDIRECT_URI = "http://127.0.0.1:5000/spotify"
SCOPE = 'user-read-private user-read-playback-state user-modify-playback-state user-library-read'
STATE = ""
SHOW_DIALOG_bool = True
SHOW_DIALOG_str = str(SHOW_DIALOG_bool).lower()
auth_query_parameters = {
"response_type": "code",
"redirect_uri": REDIRECT_URI,
"scope": SCOPE,
"client_id": CLIENT_ID
}
@app.route('/spotify_authentication')
def spotify_auth():
url_args = "&".join(["{}={}".format(key,urllib.parse.quote(val)) for key, val in auth_query_parameters.items()])
auth_url = "{}/?{}".format(SPOTIFY_AUTH_URL, url_args)
return redirect(auth_url)
@app.route('/spotify')
def spotify():
auth_token = request.args['code']
code_payload = {
"grant_type": "authorization_code",
"code": str(auth_token),
"redirect_uri": REDIRECT_URI
}
base64encoded = base64.b64encode("{}:{}".format(CLIENT_ID, CLIENT_SECRET).encode())
headers = {"Authorization": "Basic {}".format(base64encoded.decode())}
post_request = requests.post(SPOTIFY_TOKEN_URL, data=code_payload, headers=headers)
response_data = json.loads(post_request.text)
access_token = response_data["access_token"]
refresh_token = response_data["refresh_token"]
token_type = response_data["token_type"]
expires_in = response_data["expires_in"]
authorization_header = {"Authorization":"Bearer {}".format(access_token)}
return render_template('spotify.html')
Теперь я хочу реализовать кнопку выхода из системы, которая завершает аутентификацию. Там, кажется, не много полезных ответов в Интернете. Некоторые направляют вас к перенаправлению /logout
точки обзора на другую страницу. Когда я это сделаю, я смогу go вернуться в веб-браузер на мою аутентифицированную страницу - это не значит, что мне нужно выйти! Например, направление на accounts.spotify.com/logout
перенаправляет меня на собственную страницу выхода из Spotify, чтобы выйти из моей платформы, а не из моего приложения.
Как реализовать метод выхода из системы, который стирает доступ для аутентификации и перенаправляет на /spotify_authentication
правильно, используя Python 3? Я не против, если пользователю придется снова проходить аутентификацию со своими учетными данными.