Я создал 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});