Невозможно пройти аутентификацию в Trello с помощью Flutter / Dart (невозможно получить фрагмент URL) - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь использовать Flutter Dart для аутентификации в Trello, используя пакет url_launcher, основанный на публикации в блоге Кевина Сего, вместе с документацией по авторизации Trello.

Мой код отображает страницу авторизации Trello и вызывает URL-адрес обратного вызова, но я не могу получить токен (который передается как фрагмент URL-адреса), недоступный для HTTP-запроса. Однако на экране четко отображается URL с токеном в виде фрагмента в URL.

class TrelloAuthenticator {

  Future<String> authorize()  async {
    Stream<String> onCode = await _server();
    var url = "https://trello.com/1/authorize?expiration=30days&name=TestApp&callback_method=fragment&scope=read,write&return_url=http://localhost:8080&key=ab1234ab1234ab1234ab1234";
    print("modifiedUrl:$url");
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
    final String token = await onCode.first; 
    return token;
  }


  Future<Stream<String>> _server() async {
    final StreamController<String> onCode = new StreamController();
    HttpServer server = await HttpServer.bind(InternetAddress.loopbackIPv4, 8080);
    server.listen((HttpRequest request) async {
      print("_server method:${request.method}");
      print("_server contentType:${request.headers.contentType}");
      print("_server requestedUri:${request.requestedUri}");
      print("_server requestedUri hasFragment:${request.requestedUri.hasFragment}");
      print("_server requestedUri fragment:${request.requestedUri.fragment}");
      print("_server requestedUri data:${request.requestedUri.data}");
      print("_server requestedUri origin:${request.requestedUri.origin}");
      print("_server requestedUri query:${request.requestedUri.query}");
      print("_server requestedUri queryParameters:${request.requestedUri.queryParameters}");
      print("_server requestedUri normalizePath:${request.requestedUri.normalizePath()}");
      print("_server requestedUri normalizePath queryParametersAll:${request.requestedUri.normalizePath().queryParametersAll}");
      print("_server requestedUri normalizePath hasFragment:${request.requestedUri.normalizePath().hasFragment}");
      print("_server requestedUri normalizePath fragment:${request.requestedUri.normalizePath().fragment}");
      print("_server uri:${request.uri}");
      print("_server hasFragment:${request.uri.hasFragment}");
      print("_server Fragment:${request.uri.fragment}");
      print("_server parm count:${request.uri.queryParameters.length}");
      for (int i = 0;  i <request.uri.queryParameters.length; i++ ) {
        print("_server parm:${request.uri.queryParameters[i]}");
      }

      final String token = request.uri.fragment;
      request.response
        ..statusCode = 200
        ..headers.set("Content-Type", ContentType.html.mimeType)
        ..write("<html><h1>Notice the token in the URL fragment above</h1></html>");
      await request.response.close();
      await server.close(force: true);
      onCode.add(token);
      await onCode.close();
    });
    return onCode.stream;
  }

Вот ссылки:

Сообщение в блоге Кевина Сего: https://medium.com/@segaud.kevin/facebook-oauth-login-flow-with-flutter-9adb717c9f2e

Авторизация Trello: https://developers.trello.com/page/authorization

И изображение эмулятора:

Trello authorization page

Call back to local server - notice the token as a fragment

...