Flutter: Как аутентифицировать API, где запрос get возвращает HTML - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь создать во Флаттере приложение, использующее API Spotify.Мне особенно нужно использовать Spotify Web Api, потому что он единственный, который разрешает доступ к личным плейлистам пользователя.

Я пытаюсь написать код для аутентификации, но когда я отправляю запрос GET, я получаюHTML в ответ.

Вот код, который я использую:

void _auth() async{
  final String state = randomAlphaNumeric(20);
  final Map<String, String> authQueryParameters = {
    "client_id": SPOTIFY_CLIENT_ID,
    "response_type": "code",
    "redirect_uri": "painless_playlist://callback",
    "state": state,
    "scope": "playlist-read-private playlist-read-collaborative playlist-modify-private playlist-modify-public user-library-read"
  };
  Uri uri = new Uri.https(SPOTIFY_ACCOUNT_AUTHORITY, "authorize", authQueryParameters);
  print(uri.toString());
  HttpClientRequest request = await httpClient.getUrl(uri);
  HttpClientResponse response = await request.close();
  await response.transform(Utf8Decoder()).listen(print);
}

и вот что возвращается:

<!DOCTYPE html>
<html lang="en" dir="ltr" ng-app="accounts" ng-csp ng-strict-di>
<head>
  <meta charset="utf-8">
  <title ng-bind="(&#39;loginTitle&#39; | localize) + &#39; - Spotify&#39;">Spotify</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <base href="/">
  <link rel="icon" href="https://accounts.scdn.co/images/favicon.ace4d8543bbb017893402a1e9d1ac1fa.ico">
  <link href="https://accounts.scdn.co/css/index.2298e26e3e5796a7bb68.css" media="screen" rel="stylesheet">

  <script async defer
          src="https://www.google.com/recaptcha/api.js?render=explicit"
          nonce="wLHnpa4sDVHdmLiYTMXAZw=="></script>
  <script defer src="https://accounts.scdn.co/js/index.2298e26e3e5796a7bb68.js" sp-bootstrap></script>
  <meta ng-non-bindable sp-bootstrap-data='{"country":"US","captchaSiteKey":null,"useCaptcha":false,"BON":["0","0",1206798229]}'>
</head>
<body ng-controller="LoginController">
  <div ng-include="template"></div>
</body>
</htm

Я не знаю, что делатьделать с этим.Я должен выяснить, как открыть браузер и отобразить этот HTML?Я искал вокруг, и некоторые ресурсы говорят, что нужно открывать URI в браузере вместо того, чтобы делать запрос GET, но это просто показывает страницу с ошибкой на сайте Spotify.

Я довольно растерян, что делать;любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 02 января 2019

Вам потребуется открыть браузер, чтобы пользователь мог войти в систему и пройти аутентификацию с помощью spotify, что позволит вашему приложению получить доступ к API-интерфейсу spotify.

Кроме того, вам, вероятно, понадобится API с конечной точкой для использования Spotify в качестве «обратного вызова», чтобы вы могли обрабатывать аутентифицированного пользователя и получать его AccessToken / RefreshToken для выполнения будущих запросов.

Ваше приложение будет / должно:

  • вызывать spotify для авторизации (открыть браузер в приложении)
  • пользователь входит в систему
  • спортировать вызовы обратно к конечной точке API (затем вы можете запросить токены у spotify и сохранить их в своей базе данных)
  • отобразить страницу «успеха» / HTML в браузере приложения (это будет доставлено вашим API через «обратный вызов»)
  • теперь вы можете делать запросы к API-интерфейсу spotify с помощью токенов
...