django rest framework JWT возвращает анонимного пользователя несмотря на то, что класс разрешений угловой 5 - PullRequest
0 голосов
/ 10 мая 2018

Я использую угловые 5 на передней части. С HTTP-перехватчиком, который, если клиент вошел в систему, отправляет токен вместе с любым http-запросом, сделанным на мой сервер. Я могу войти в мою систему. Так что схема JWT работает правильно.

Перехватчик выглядит так: я консоль регистрирую токен, чтобы убедиться, что он добавляется, и он корректно работает в моих журналах.

import { Injectable } from '@angular/core';
import {
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpInterceptor
} from '@angular/common/http';
import {UserAuthorizationService} from "../userservice/userauthorizationservice/userauthorizationservice";
import { Observable } from 'rxjs/Observable';

@Injectable()
export class TokenInterceptor implements HttpInterceptor{
  constructor(private tokenservice: UserAuthorizationService){}

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>{
    let token = this.tokenservice.checklocalfortoken();
    if(token == null){
      token = this.tokenservice.checksessionfortoken();
    }
    if(token != null){
      console.log('here is the token being sent');
      console.log(token);
      request = request.clone({
        setHeaders: {
          Authorization: 'JWT ' + token
        }
      });
    }
    return next.handle(request);


  }

}

Схема токена работает, я ее проверил.

Настройки установлены правильно. Практически все, что нужно сделать в этом руководстве, сделано:

http://getblimp.github.io/django-rest-framework-jwt/

переход к реальному виду:

class CreateSuitsuser(APIView):
    permission_classes = (Issuitssuperuser,)

    def post(self, request, *args, **kwargs):
        serialized = CreateSuitsUserSerializer(data=request.data)
        if serialized.is_valid(raise_exception=True):
            data = serialized.data
        ...

класс разрешений:

class Issuitssuperuser(BasePermission):

    def has_permission(self, request, view):
        if request.user.issuitssuperuser:
            return True
        return False

ошибка:

if request.user ['issitssuperuser']: Ошибка TypeEr: объект AnonymousUser не имеет атрибута getitem [10 / May / 2018 20:36:51] "ОПЦИИ / API / пользователь / костюмы / HTTP / 1.1" 500 21855 Выполнение системных проверок ...

а зачем? Это не круто. Что я делаю неправильно, что не делает это круто? Я бы хотел, чтобы это было круто.

1 Ответ

0 голосов
/ 11 мая 2018

Я закончил тем, что написал свои собственные разрешения для APIVIEWS и использовал разрешения django для дженериков

просто и мне это надоело:

class SuitsPermissions():

    def superuser(self, user):
        if user.issuitssuperuser:
            return True
        return False

    def admin(self, user):
        if user.issuitsadministrator:
            return True
        return False
...