【问题标题】:dart flutter httpclient : authorization飞镖颤动httpclient:授权
【发布时间】:2018-05-25 14:02:53
【问题描述】:

我想使用简单的令牌执行基本身份验证;如何在颤振中执行此操作?哪个是最好的方法?

var response = await httpClient.post(url, 
    body: {'name': 'doodle', 'color': 'blue'});

以这种方式添加身份验证标头是否足够?

var response = await httpClient.post(
    url, 
    header:{ 
        'authorization' : 'bearer $token', 
        'content-type':'application/json'
    },
    body :{some body});

我正在使用 JWT 令牌类型

【问题讨论】:

  • 你基本上是自己回答的。
  • David,继续用标题/授权/内容类型代码 sn-p 自行回答这个问题。那应该行得通。让它成为一个自我回答告诉下一位读者“是的,这是一种方式”
  • 我用两个函数解决了这个问题;第一个返回 Future,第二个由按钮触发;它创建未来并管理响应。 http 调用是使用 httpclient 进行的,如前所示。

标签: dart jwt flutter


【解决方案1】:

注意单词 Bearer 它必须大写其他方式它不会起作用,不确定是什么原因,但是对于颤振的 http 调用,请确保像这样将该单词大写

var response = await httpClient.post(
url, 
headers:{ 
    "Accept": "application/json",
    "Content-type": "application/json",
    "Authorization": "Bearer $token"
},
body :{some body});

【讨论】:

    【解决方案2】:

    你可以使用这样的东西。

    var request = new http.Request('POST', Uri.parse(url));
    request.headers[HttpHeaders.CONTENT_TYPE] = 'application/json';
    request.headers[HttpHeaders.AUTHORIZATION] = token;
    request.body = json.encode(loginRequest.toMap());
    await client.send(request).then((response) {
      response.stream.bytesToString().then((value) {
        print(value.toString());
        jsonResponse = value.toString();
        completer.complete(jsonResponse);
      });
    }).catchError((error) {
        print(error.toString());
    });
    

    【讨论】:

      【解决方案3】:

      我更喜欢使用具有许多功能的Dio 库。 文件上传也超级简单。 很多事情都是Dio自己处理的。

      【讨论】:

        【解决方案4】:

        我使用键/值对字典作为标题信息。我使用我的 dart 类的 fromJson 方法来序列化 YourClass 类型的对象列表。

          import 'package:http/http.dart' as http
        
          String token = jwtToken;
          var client = http.Client();
          Map<String, String> headers = new HashMap();
          headers['Accept'] = 'application/json';
          headers['Content-Type'] = 'application/json';
          headers['Authorization'] = 'Bearer $token';
        
          var response = await client
              .post(url,
                  headers: headers,
                  body: json.encode(param),
                  encoding: Encoding.getByName('utf-8'))
              .timeout(_TIMEOUT);
        
        
               if (response.statusCode == 200) {
                   var parsed = json.decode(response.body).cast<Map<String, dynamic>>();
                   list = parsed
                        .map<YourClass>((json) => YourClass.fromJson(json))
                .toList();
               }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-20
          • 1970-01-01
          • 2022-06-19
          • 2020-12-25
          • 2020-11-05
          • 2020-07-18
          • 2021-12-18
          • 2019-06-26
          相关资源
          最近更新 更多