【问题标题】:Flutter & Dio null safety issue in API Client: Bad Request 400API 客户端中的 Flutter 和 Dio 空安全问题:错误请求 400
【发布时间】:2022-09-28 15:30:02
【问题描述】:

我正在开发 Flutter api 客户端。 我使用我自己的 Django 后端和 dj-rest-auth 包。我通过浏览器和邮递员检查了我的后端,它似乎工作正常。如果我尝试从我的前端模拟器登录到在同一设备上运行的后端(dj-rest-auth),我会得到:

Bad Request: /dj-rest-auth/login/
[08/Sep/2022 00:50:55] \"POST /dj-rest-auth/login/ HTTP/1.1\" 400 42

我试过了: [dio 文档][1] [如何修复 400 Bad request][2](检查我的错误是否在后端) 不幸的是,我没有找到更具体的例子。

在尝试满足以下 sn-p 中的 null 安全要求后,我看到了问题(注释掉了与 null 安全性相关的错误的行,在它们下面是我尝试解决问题的两行但未成功):

Future<AuthTokens?> refreshToken(BuildContext context) async {
    final AuthTokens? authTokens = await getCurrentTokens();
    if (authTokens == null) {
        return null;
    }
    return _dio
        .post(API_HOST + \"jwt/refresh/\",
            data: {\'refresh\': authTokens.refreshToken},
            options: Options(validateStatus: (status) => status! < 500))
            .then((response) {
                authTokens.accessToken = response.data[\'access\'];
                if (response.data[\'access\'] != null) {
                    authTokens.save();
                    return authTokens;
                }
            return null;
        });
    }    
    
    void login(password, email, Function(LoginResponse) callback) {
        print(password);
        _dio
            .post(API_HOST + \"dj-rest-auth/login/\",
                data: {
                    \'email\': email,
                    \'password\': password,
                },
                options: Options(validateStatus: (status) => status! < 500))
                .then((response) {
                    AuthTokens? authTokens = response.statusCode == 200
                        ? AuthTokens.fromJson(response.data)
                        : null;
              //authTokens?.save();
              //callback(new LoginResponse(response.statusCode, authTokens!));
                    if (authTokens != null) {authTokens.save();
                    callback(new LoginResponse(response.statusCode, authTokens));}
                    else {print(\'something\');}
            });
    }

也许需要更多信息,如果需要,我会提供。如果有任何帮助,我将不胜感激。

    标签: flutter dart-null-safety bad-request dio


    【解决方案1】:

    尝试在 login() 函数中编码你的身体,如下所示:

    import 'dart:convert';
    
    data: jsonEncode({
          'email': email,
          'password': password,
        }), 
    

    【讨论】:

    • 谢谢你。不幸的是,它没有帮助。输出完全相同((
    【解决方案2】:

    错误很愚蠢,答案很有趣:-) 看看:

    void login(password, email, ...
    

    在这种情况下,论点的位置很重要。当我交换密码和电子邮件时,一切正常。

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2015-04-03
      • 2019-11-10
      • 2020-05-20
      相关资源
      最近更新 更多