【问题标题】:How to pass basic auth credentials in API call for a Flutter mobile application?如何在 Flutter 移动应用程序的 API 调用中传递基本身份验证凭据?
【发布时间】:2018-10-19 01:02:09
【问题描述】:

我正在开发一个简单的 Flutter 移动应用,该应用需要调用使用基本身份验证的 API。

我可以使用电子邮件和密码凭据在 Postman 中访问 API,它会在执行请求之前以 Base64 对电子邮件和密码进行编码(我假设用“:”分隔)。

我不确定如何在 Flutter / Dart 中执行此操作...

我已经修改了 http 包并尝试进行 Base64 编码...但我只是从服务器返回错误。

任何人都可以为基本身份验证请求提供一些指导或示例吗?

【问题讨论】:

    标签: http dart flutter


    【解决方案1】:

    假设您的服务器期望 username:password 组合将其编码为 UTF-8(有关更多详细信息,请参阅 RFC 7617)然后使用:

    import 'dart:convert';
        
    import 'package:http/http.dart';
        
    main() async {
      String username = 'test';
      String password = '123£';
      String basicAuth =
          'Basic ' + base64Encode(utf8.encode('$username:$password'));
      print(basicAuth);
        
      Response r = await get('https://api.somewhere.io',
          headers: <String, String>{'authorization': basicAuth});
      print(r.statusCode);
      print(r.body);
    }
    

    【讨论】:

    • 完美!我可以拼凑 http 位,但不知道如何实际构建标头。刚刚测试了一下,效果很好
    • 如果需要header,可以使用http post,例如:final loginResponse = await client.post(loginUrl, body: json.encode(user), headers: header);
    • 嗨,我想使用 oAuth1 而不是 basic,因为我不在 HTTPS 上,我在 HTTP 上,有什么建议吗?
    • 预构建 Header-map 需要 Map 中的强类型:medium.com/@hagenverfolgt/…
    • 在我的情况下,这会导致一个永远挂起的请求。任何想法为什么?
    【解决方案2】:

    我知道已经晚了,但如果它可以帮助其他人,我会发布这个。

    import 'dart:convert';
    
    var auth = 'Basic '+base64Encode(utf8.encode('$username:$password'));
    
    Future<Response> callAPI(param) async {
        await dio.post('/api/test',
            data: {'param': param},
            options: Options(headers: <String, String>{'authorization': auth})); 
      }
    

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多