Печенье работает в Почтальоне, но не в браузере - PullRequest
1 голос
/ 25 января 2020

Я создал API входа в систему, используя Django rest framework, а затем использовал сессионную аутентификацию. Когда я отправляю запрос через Почтальон, я получаю файлы cookie csrftoken и sessionid. и я смог получить доступ к содержимому на бэкэнде. Хорошо, хорошо.


Но когда я создал небольшую форму входа html и вызвал этот API для входа в систему. Это сработало. Я вижу, что печенье в ответ, но печенье не установлено в CHROME Браузер. В разделе «Хранение» в инструментах разработчика файлы cookie пусты. когда я пытался получить доступ к контенту (другие виды / apis), я не смог .. Я думаю, это из-за того, что файлы cookie не сохраняются в браузере. Кто-нибудь может объяснить, почему куки не сохраняются .?

View.py

class Login(APIView):
    authentication_classes = [SessionAuthentication,]

    def post(self, request, format=None):

        username = request.POST.get("username", "")
        print(request.session)
        password = request.POST.get("password", "")
        user = authenticate(request,username=username,password=password)
        if user is not None:
            login(request,user)
            print(user)

            return Response('Yes')
        else :
            return Response('No')

class List(APIView):
   authentication_classes = [SessionAuthentication,]
   permission_classes = [IsAuthenticated,]
   def get(self, request, format=None):
      return Response("Ark")

Мой топор ios Запрос на вход в систему:

let s = this;
    var myHeaders = new Headers();
    myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
    myHeaders.append("Authorization", "Basic cjox");
myHeaders.append("Access-Control-Allow-Credentials","*");

    var urlencoded = new URLSearchParams();


    var requestOptions = {
      method: 'POST',
      credentials: 'same-origin',
      headers: myHeaders,
      body: urlencoded,
      redirect: 'follow'
    };

    axios.post("http://127.0.0.1:8000/api/login/",urlencoded,{headers:myHeaders},{withCredentials: true})
    .then(res=>{
      console.log(res.headers);

    })

Мой другой запрос:

var myHeaders = new Headers();
    myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
myHeaders.append("Access-Control-Allow-Credentials","*");
    var urlencoded = new URLSearchParams();

    var requestOptions = {
      method: 'GET',
      credentials: 'same-origin',
      headers: myHeaders,
      redirect: 'follow'
    };

    axios.get("http://127.0.0.1:8000/api/d/",{headers:myHeaders},{withCredentials: true});
...