Angular 2 Uncaught(承诺):状态响应:401未经授权的URL

时间:2018-04-16 17:48:06

标签: angular local-storage

我正在尝试实现我的登录功能,以及它成功登录,问题是我收到此错误,未捕获异常:响应状态:401未授权URL:http://127.0.0.1:8000/scrumboard/Recruteurs/ (我的后端使用Django实现)

login.ts:

onSignin(form: NgForm) {
      this.myService.login({username: this.user.username, password: this.user.password})
      .subscribe(
        data =>  {
          this.router.navigate(['dashboard'])}
      );
    }

mySercice.ts:

public login(user: any){
      const body = JSON.stringify(user);
      let headers = new Headers({
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      });

      return this.http.post(this.domain+'/api-token-auth/', body, {
        headers: headers
      })
            .map((response: Response) => {
                let token = response.json() && response.json().token;
                if (token) {
                    this.token = token;
                    localStorage.setItem('currentUser', body);
                    return true;
                } else {
                    return false;
                }
            });
}

这是我的后端逻辑: settings.py:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

urls.py:

router = DefaultRouter();
router.register(r'Recruteurs', RecruteurViewSet)
urlpatterns = router.urls

api.py:

class RecruteurViewSet(ModelViewSet):
    queryset = Recruteur.objects.all()
    serializer_class = RecruteurSerializer
    permission_classes = (permissions.IsAuthenticated,) 

我的所有页面都空白。我做错了什么?

1 个答案:

答案 0 :(得分:0)

查看您的帖子并不清楚您是否在发送JWT令牌以及第二个请求。登录并将令牌保存在本地存储中后,请确保在后续请求中正确设置了Authorization标头。

我认为在路由器重定向登录后会向招聘人员发出请求,因此请查看您在仪表板上调用的服务,并确保其正确设置授权标头。

授权标题文档:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization

此外,您可以在Angular中设置拦截器,它会自动将正确的标头附加到每个请求,如果您获得401,则会将用户重定向到登录页面。

教程:https://medium.com/@ryanchenkie_40935/angular-authentication-using-the-http-client-and-http-interceptors-2f9d1540eb8