2015-08-28 5 views
0

Я использую Django Rest Framework на бэкэнд и приложение ember-cli на интерфейсе. Аутентификация работает правильно, но, похоже, в разрешении есть дыра.Django не признает мой токен?

# settings.py 
REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.AllowAny', 
    ), 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.TokenAuthentication', 
    ), 
} 

# views.py 
class CurrentUserView(APIView): 
    "get the data for the current authenticatd user" 
    permission_classes = (IsAuthenticated,) 

    def get_queryset(self, request): 
     queryset = User.objects.filter(username=request.user.username) 
     return queryset 

    def get(self, request): 
     serializer = UserSerializer(request.user) 
     return Response(serializer.data) 

Когда я делаю запрос к этой конечной точке /v1/me/ он отвечает назад с 403. Когда я снимаю класс разрешения, я вернусь {"id":null,"username":"","is_active":false}, потому что он не знает, кто я.

Кроме того, когда я использую API-интерфейс для просмотра, URL-адрес /v1/me работает правильно.

На третьей стороне я вхожу в систему со своей учетной записью и правильно верну свой токен. В запросе передается Authorization: Token asdf1234asdf1234asdf1234. Я бы подумал, что Джанго берет этот знак и знает, кто я? Я что-то упускаю?

ответ

0

Try что-то вроде

from rest_framework import authentication 
class TokenAuthView(APIView): 
    authentication_classes = (authentication.TokenAuthentication,) 

Затем

class CurrentUserView(TokenAuthView) 
+0

ну нет TokenGETAuthentication, но я добавил, что класс аутентификации и он работает. Я не знаю, почему, потому что это, предположительно, мой auth-класс по умолчанию и должен применяться автоматически? – awwester

+0

Я скопировал его из своей системы, которую я переименовал :). – itzMEonTV

0

В настройках нужно добавить auth_token.

# settings.py 
    INSTALLED_APP = ('rest_framework.authtoken',) 

Вам не нужно добавлять аутентификационные_классы на каждое представление.

Смежные вопросы