首页 > 解决方案 > 使用 Flutter for Mediawiki 进行客户端登录

问题描述

我正在学习颤振和请求的过程,如果这是一个简单的错误,请原谅我。我正在尝试使用客户端登录 api 使客户端登录到 mediaiwki 实例。我可以成功获取登录令牌,但是当我尝试登录时它说无效的 csrf 令牌它给出 {"error":{"code":"badtoken","info":"Invalid CSRF token.","*":" . 我用来登录的api如下 https://www.mediawiki.org/wiki/API:Login#Method_2._clientlogin 感谢您的帮助。

要成功获取登录令牌,我使用

_fetch_login_token() async {
  Map<String, String> headers = {"Content-type": "application/json"};
  Map<String, String> body = {
    'action': "query",
    'meta': "tokens",
    'type': "login",
    'format': "json"
  };

  Response response = await post(
    url,
    body: body,
  );
  //print(response);
  // int statusCode = response.statusCode;
  // print(statusCode);
  var decoded = jsonDecode(response.body);
  print(decoded);
  var jsonsData = response.body; // toString of Response's body is assigned to jsonDataString
  var data = jsonDecode(jsonsData);
  var token=data['query']['tokens']['logintoken'];
  return _makePostRequest(token);
}

我的登录失败如下

Map<String, String> body = {
    'action': "clientlogin",
    'username': username,
    'password': password,
    'loginreturnurl': url,
    'logintoken': loginToken,
    'format': "json"
    };

  Response response = await post(
    url,
    body:body,
  );

标签: flutterdartmediawiki

解决方案


我解决了这个问题。为了将来参考,我已经下载了 dio 包并添加了拦截器和 cookie 管理器以保留 cookie。


推荐阅读