2016-03-29 4 views
0

Я отправляю запрос на получение $ http от моего углового клиента до моего бэкэнда Django, где (request.user) дает мне Anonymous. Из-за этого я могу делать что угодно на стороне сервера.django angular anonymous user

Я использую Джанго-Rest-AUTH на стороне Джанго и угловой Джанго регистрации-аутентификации на стороне клиента, чтобы сделать проверку подлинности. Сама аутентификация успешна - я могу войти в систему и получить имя пользователя, идентификатор электронной почты на стороне клиента, отправленный с сервера.

Мой запрос выглядит следующим образом:

var url = "http://localhost:8000/api/exercises/get_exercise/" + exerciseType + "/"; 

    $http({ 
      url: url, 
      method: 'GET', 
      headers: {'X-CSRFToken': $cookies['csrftoken']} 
     }) 

      .success(function(response){ 

      console.log(response); 

      }); 
     }) 

В моем приложении конфигурации я следующая строка добавлена:

$httpProvider.defaults.withCredentials = this.use_session; 

заголовки запроса, как видно из моего хром браузера консоли следующим образом:

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,en-GB;q=0.2 
Authorization:Token eb979cb6f179dd2d9056023685e2d02e4e65a58e 
Connection:keep-alive 
Host:localhost:8000 
Origin:http://localhost:8100 
Referer:http://localhost:8100/ 
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 

Если я удаляю тот же URL-адрес с моей конечной точки django api непосредственно на 'http://127.0.0.1:8000/api/exercises/get_exercise/2/ ', где мой Джанго сервер работает она успешна и заголовки запроса следующим образом:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,en-GB;q=0.2 
Cache-Control:max-age=0 
Connection:keep-alive 
Cookie:csrftoken=GDco30gJ9vki6LDtqJSuQh9hGB0aXp84;  sessionid=94xfwx9zvr4pgd1wx9r0nemjwmy3mowi 
Host:127.0.0.1:8000 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 

Различие я вижу в том, что успешный запрос отправляет куки и данные сеанса, где, как пропавшие из запроса, отправленного из моего углового приложения.

В чем причина и обходной путь?

Мои Джанго settings.py имеет следующие:

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

} 

мой взгляд Джанго выглядит следующим образом:

from django.contrib.auth.models import User 
from rest_framework.authentication import TokenAuthentication,  SessionAuthentication, BasicAuthentication 
from rest_framework.permissions import IsAuthenticated 
from rest_framework.response import Response 
from rest_framework.views import APIView 
from rest_framework.decorators import api_view 
from rest_framework.decorators import authentication_classes 
from rest_framework.decorators import permission_classes 

class JSONResponse(HttpResponse): 
authentication_classes = (SessionAuthentication, BasicAuthentication) 
permission_classes = (IsAuthenticated,) 
""" 
An HttpResponse that renders its content into JSON. 
""" 
def __init__(self, data, **kwargs): 
    content = JSONRenderer().render(data) 
    kwargs['content_type'] = 'application/json' 
    super(JSONResponse, self).__init__(content, **kwargs) 

#view to get a specific exercise for a particular user 
def get_single_exercise_for_user_id(request, exerciseId): 

    results = Exercise_state_ui_model.fetch_exercises(request.user.id, exerciseId) 

    serializer = ExerciseStateSerializer(results, many=True) 
    return JSONResponse(serializer.data) 

ответ

1
Authorization:Token eb979cb6f179dd2d9056023685e2d02e4e65a58e 

заставляет меня думать, что вам нужно включить маркер проверки подлинности на этой точке зрения.

#view to get a specific exercise for a particular user 
@api_view(('GET',)) 
def get_single_exercise_for_user_id(request, exerciseId): 

    results = Exercise_state_ui_model.fetch_exercises(request.user.id, exerciseId) 

    serializer = ExerciseStateSerializer(results, many=True) 
    return Response(serializer.data) 
+0

Я обновил свой вопрос с помощью фрагментов из моих настроек.py и views.py. Можете ли вы посмотреть, нет ли чего-то? – Nitish

+0

Вам нужно украсить этот вид. Также выньте JSONresponse, пусть rest_framework решит, какой контент он вернет, на основе того, что просит клиент. – kevswanberg

+0

Удивительный! ваше решение сработало! Я потратил два дня на поиски всех возможных причин! Большое спасибо! – Nitish