Выход пользователя из сеанса в Django Rest Framework - PullRequest
3 голосов
/ 08 октября 2019

У меня есть приложение, в котором внешний интерфейс написан на Angular 6, а внутренний - на Django Rest Framework.

В системе реализован выход пользователя из системы со следующим кодом:

@Component({
  selector: 'app-logout-modal',
  templateUrl: './logout-modal.component.html',
  styleUrls: ['./logout-modal.component.scss']
})
export class LogoutModalComponent implements OnInit {

  constructor(public thisDialogRef: MatDialogRef<LogoutModalComponent>,
              private router: Router,
              @Inject(MAT_DIALOG_DATA) public data: any) {
  }

  ngOnInit() {
  }
  logoutAndClose(): void {
    localStorage.clear();
    this.thisDialogRef.close();
    this.router.navigateByUrl(RouteUrls.Login);
  }
}
class ProfileSettingsViewset(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
    @action(detail=False, methods=['post'])
    def logout(self, request):
        #???
        return Response(status=status.HTTP_200_OK)

То есть пользователь фактически не выходит из системы.

Как я могу реализовать выход пользователя из системы по сеансу на DRF?

1 Ответ

1 голос
/ 08 октября 2019

чтобы выйти из системы, вы должны реализовать viewset.

, если вы используете базовую аутентификацию токена, просто удалите токен

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView

class Logout(APIView):
    def get(self, request, format=None):
        # simply delete the token to force a login
        request.user.auth_token.delete()
        return Response(status=status.HTTP_200_OK)

, если вы используете бэкэнд аутентификации сеанса, вы должны выйти из системы с бэкэндами Django, такими какthis:

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from django.contrib.auth import logout

class Logout(APIView):
    def get(self, request, format=None):
        # using Django logout
        logout(request)
        return Response(status=status.HTTP_200_OK)

затем в URL:

urlpatterns = [
    ...
    url(r'^logout/', Logout.as_view()),
]

в вашем угловом компоненте должен вызвать Ajax-запрос к этому представлению перед удалением очистки содержимого локального хранилища

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...