Вопрос об управлении куками Django (API rest) в приложении Flutter. Надежна ли моя система?

Я начинаю во Flutter и создал api с логином.

Для аутентификации я получаю cookie от моего Django REST API. Из моего POST запроса на вход я сохраняю эти куки в моем приложении.

образец печенья (1):


{set-cookie: csrftoken=7IASHmHBDkqkFxPnYF5rRjEaT0hyd4cxSKHKx2ibnNmmYBBvX68gVKOSDjPZxPAB; expires=Tue, 25 Apr 2023 21:35:15 GMT; Max-Age=31449600; Path=/; SameSite=Lax,
sessionid=05yj1bmg5ei7riw8glh13d0gmmw06jbq; expires=Tue, 26 Apr 2022 23:35:15 GMT; HttpOnly; Max-Age=7200; Path=/; SameSite=Lax, date: Tue, 26 Apr 2022 21:35:15 GMT, vary: Accept, Cookie, content-length: 0, referrer-policy: same-origin, cross-origin-opener-policy: same-origin, x-frame-options: DENY, x-content-type-options: nosniff, server: WSGIServer/0.2 CPython/3.10.2, allow: POST, OPTIONS}

Затем, чтобы сделать GET запрос, мне нужно установить cookie следующего вида.


"csrftoken=MZ8YuHN7GaGPId6XEoHOmLJGCj5FrJFU1lElphAxWJVwq366rPoAyI3fOhcEK6ks; sessionid=7cwighx7vbpcoszfl5ltxy2jf32psjeh"


Чтобы затем использовать его в объекте Response из пакета Getx connect :

Response response = await get(appBaseUrl + uri, headers: {"Cookie": COOKIE});

Итак, мне удалось преобразовать в нужную форму мой образец печенья (1)

Я бы хотел знать, надежна ли моя система, приведенная ниже, потому что стоит лишь немного изменить ее, и уже ничего не будет работать.

Есть ли у вас другое решение, которое вы можете мне посоветовать?



Future<ResponseModel> login(String username, String password) async {
    _isLoading = true;

    update();

    Response response = await authRepo.login(username, password);
    late ResponseModel responseModel; 

    if (response.statusCode == 202) {
      print(response.headers);

      print("the header set cookie " + response.headers!["set-cookie"].toString());

      String setcookie = response.headers!["set-cookie"].toString();

      List<String> list_setcookie = setcookie.split(';');

      var list_list_setcookie = [];
      var item_setcookie = "";

      for (var i = 0; i < list_setcookie.length; i++) {
        List<String> a = list_setcookie[i].split(',');

        list_list_setcookie.add(a);
      }

      var csrftoken = "";
      var sessionid = "";

      sessionid = list_list_setcookie[4][1];
      csrftoken = list_list_setcookie[0][0];

      var cookie = "";

      cookie = csrftoken + ";" + sessionid;

      print(cookie);

      AppConstants.COOKIE = cookie;

      authRepo.saveUserToken(response.headers!["set-cookie"].toString());
      authRepo.saveUserHeaders(response.headers);

      print("the saved cookie is : " + AppConstants.COOKIE);

      responseModel = ResponseModel(true, response.headers!["set-cookie"].toString());
    } else {
      responseModel = ResponseModel(false, response.statusText!);
    }

    _isLoading = false;

    update();

    return responseModel;
  }




Спасибо большое!

Gum

Вернуться на верх