如何在Angular Dart中处理令牌认证?

时间:2017-09-10 18:09:44

标签: django-rest-framework dart local-storage token django-rest-auth

第一次处理SPA。我有一个后端的restful服务,当用户登录时返回一个令牌。我知道我应该通过每个请求中的标头发送令牌,所以我在考虑将令牌保存在文件中并创建服务或者在每个组件中加载令牌的类,但我不知道这是否是一个好的方法,因为我无法找到Angular Dart的文档。

1 个答案:

答案 0 :(得分:0)

我将标记首先保存在localStorage中,因为Tobe O建议:

Future login(username, password) async {
    String url = 'http://127.0.0.1:8000/auth/login/';
    var response =
    await _client.post(url, body: {'username': username, 'password': password});
    Map mapped_response = _decoder.convert(response.body);
    window.localStorage.addAll({"token": mapped_response["key"]});
}

但是当我试图获取用户信息时,我仍然收到了401回复,这就是函数:

  Future check_authentification () async {
      String _headers_key = "Authorization";
      String _headers_value =  "Token "+window.localStorage["token"];
      var response = await _client.get("http://127.0.0.1:8000/auth/user/", headers: {_headers_key: _headers_value});
      user_data = _decoder.convert(response.body);
      response_status = response.statusCode;
  }

我无法获得授权,因为django-rest-auth未正确配置令牌授权。解决方案是将TokenAuthentication添加到django设置中的默认身份验证类。

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.TokenAuthentication',
)}