Авторизация с помощью Reddit API. Не можете обменять код на токен на предъявителя, недействительный грант? - PullRequest
0 голосов
/ 15 марта 2020

Я следую документации от reddit , я получаю код авторизации, но когда я пытаюсь обменять его на токен на предъявителя, я получаю ошибку invalid_grant, даже если я ее установил единственный вариант, который я могу использовать. Я бы предпочел использовать этот метод авторизации, чтобы мне не приходилось взаимодействовать с учетными данными пользователей.

from flask import Flask, redirect, request
import requests
import requests.auth
import json
import urllib


app = Flask(__name__)


@app.route('/')
def main():
    return "<a href='/authorize'>Authorize</a>"


@app.route("/authorize")
def authorize():
    params = {
        "client_id": "client id",
        "response_type": "code",
        "state": "randomStateKey",
        "redirect_uri": "http://127.0.0.1:5000/callback",
        "duration": "temporary",
        "scope": "edit",
    }
    url = "https://www.reddit.com/api/v1/authorize?"
    return redirect(url + urllib.parse.urlencode(params))


@app.route("/callback")
def callback():
    authorization_code = request.args.get("code")
    response = code_token_exchange(authorization_code)
    return json.dumps(response)


def code_token_exchange(authorization_code):
    client_auth = requests.auth.HTTPBasicAuth('client id', 'client secret')
    headers = {"User-Agent": "MyApp/v1"}
    data = {
        "grant_type": "authorization_code",
        "code": authorization_code,
        "redirect_uri": "127.0.0.1:5000/callback"
    }
    url = "https://www.reddit.com/api/v1/access_token"
    response = requests.post(url=url, data=data, auth=client_auth, headers=headers)
    return response.json()


if __name__ == '__main__':
    app.run()

1 Ответ

0 голосов
/ 15 марта 2020

Такая глупая ошибка, но если кто-то сталкивается с той же проблемой:

"redirect_uri": "127.0.0.1:5000/callback"

Я пропустил "http: //" в начале. Убедитесь, что это соответствует URL перенаправления в вашей учетной записи приложения reddit.

...