我在Django REST框架中有这个LoginView。
class LoginView(APIView):
serializer_class = LoginSerializer
authentication_classes = [SessionAuthentication, ]
def post(self, request):
if request.user.is_authenticated:
return Response({'message': 'User is already logged in'}, status=status.HTTP_200_OK)
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
email = serializer.validated_data.get('username')
password = serializer.validated_data.get('password')
user = authentication.authenticate(request, username=email, password=password)
if user is not None:
login(request, user)
response = Response({'message': 'User logged in successfully'}, status=status.HTTP_200_OK)
return response
else:
return Response({'message': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)
else:
# If the serializer is not valid, return validation errors
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
vue.js应用程序中axios的此请求
<script setup>
import axios from 'axios'
import {ref, onMounted} from 'vue'
const email = ref("");
const password = ref("");
axios.defaults.withCredentials = true
function login() {
axios.post('http://127.0.0.1:8000/api/login/', {
username: email.value,
password: password.value,
})`your text`
}
</script>
当我发出请求时,cookie(会话)被加载到数据库,但没有加载到浏览器。你有什么建议吗?
当我从www.example.com端点发出请求127.0.0.1:8000/api/login时,它按预期工作。当我通过axios从localhost:5173发出请求时,它不起作用。
1条答案
按热度按时间7lrncoxx1#
在django restframework文档中,很明显SessionAuthentication应该与标准的Django登录页面一起使用。
警告:在创建登录页面时,请始终使用Django的标准登录视图。这将确保您的登录视图得到适当的保护。
SessionAuthentication是一个使用django标准页面和restframework提供的API路由的便利。如果你不打算在你的应用中使用django标准页面,最好使用另一种身份验证机制,比如BasicAuth