Pinterest Oauth2 Проблема с токеном доступа - PullRequest
0 голосов
/ 06 марта 2020

У меня есть приложение Flutter, которое я пытаюсь интегрировать с Pinterest, и я немного застрял.

У меня есть код для запроса токена доступа, и, хотя код получает токен доступа, этот токен не представляется полезным. Любой API, который я вызываю с этим токеном, приводит к 308, и если я go захожу на сайт разработчика Pinterest и отлаживаю токен, то это выглядит так:

enter image description here

Итак, токен не имеет областей и не был выпущен для реального приложения, что очень странно. Код, который у меня есть, выглядит следующим образом:

  Future<String> _login() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();

    accessToken = null;
    if (accessToken == null) {
//      accessToken = prefs.get(ACCESS_TOKEN_KEY);

      //If we don't have an existing access token, get a new one.
      if (accessToken == null) {
        final appId = "myappid";
        final secret =
            "mysecret";

        final url = Uri.https('api.pinterest.com', 'oauth', {
          'response_type': 'code',
          'client_id': appId,
          'redirect_uri': "pdk<myappid>://",
          'state': 'someBogusStuff',
          'scope': 'read_public,write_public',
        });

        final result = await FlutterWebAuth.authenticate(
            url: url.toString(), callbackUrlScheme: 'pdk<myappid>');

        print(result);

        final tokenEndpoint = Uri.https('api.pinterest.com', 'v1/oauth/token');

        // Use the code to get an access token
        final response = await http.post(tokenEndpoint, body: {
          'client_id': appId,
          'client_secret': secret,
          'grant_type': 'authorization_code',
          'code': Uri
              .parse(result)
              .queryParameters['code'],
        });

        if (response.statusCode != 200) {
          return response.body;
        }

        var decodedResponse = jsonDecode(response.body);
        print(decodedResponse);
        accessToken = decodedResponse['access_token'];

        //Save the access token
        prefs.setString(ACCESS_TOKEN_KEY, accessToken);
      }
    }

    return getMe(accessToken);
  }

  Future<String> getMe(String token) async {
    final url =
        Uri.https('api.pinterest.com', 'v1/me', {'access_token': token});

    Completer<String> completer = Completer();
    String result;
    http.get(url, headers: {'User-Agent': 'PDK 1.0'}).then((response) {
      print(response.statusCode);
      result = response.body;
    }).whenComplete(() => completer.complete(result));

    return completer.future;
  }

Когда я распечатываю результат вызова / oauth / token, похоже, что я получил хороший токен:

{access_token: AvtF3MxUy4gbujGGhN_KcYFExQVAFfmOZGmxYN5GkhE-iKDH6QpYADAAAzbHRpc4dD1gvFwAAAAA, token_type: bearer, scope: [read_write_all, read_public, write_public, read_private, write_private]}

Но это не работает. Что я здесь не так делаю?

...