Flask Функция выхода из API Spotify - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть небольшое приложение 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? Я не против, если пользователю придется снова проходить аутентификацию со своими учетными данными.

1 Ответ

0 голосов
/ 14 апреля 2020

Мне кажется, что вам просто нужно очистить переменные сеанса, которые содержат токен доступа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...