Я пытаюсь сделать очень простую форму входа, используя angular.js на передней панели и апи-отдыхе на заднем конце. Вот форма на HTML стороне:403 ошибка с сообщением angular.js и рамки django rest
<form action="" method="post">
{% csrf_token %}
<div class="modal-body">
<div class="form-group">
<label for="login-username" class="control-label">Email:</label>
<input type="text" class="form-control" name="username" id="login-username" ng-model="loginData.email" required>
</div>
<div class="form-group">
<label for="login-password" class="control-label">Password:</label>
<input type="text" class="form-control" name="password" id="login-password" ng-model="loginData.password" required>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" ng-click="login()">Login as {$ loginData.email $}</button>
</div>
</form>
А вот мой угловой контроллер (NB: Я знаю, что это не проблема здесь, потому что у меня есть очень похожий один для функции регистра, который работает просто отлично):
mainApp.controller("mainCtrl", function($scope, $http) {
$scope.loginData = {"email":"[email protected]","password":"pass"};
$scope.login = function() {
return $http.post('/api/v1/auth/login/',
$scope.loginData
).success(function(data, status){
alert("success : "+status);
console.log(data);
}).error(function(data, status){
alert("error : "+status);
});
}
});
и вот мое угловое приложение, которое включает заголовки CSRF:
var mainApp = angular.module("mainApp", []).config(function($interpolateProvider) {
$interpolateProvider.startSymbol('{$');
$interpolateProvider.endSymbol('$}');
}).run(run);
function run($http) {
$http.defaults.xsrfHeaderName = 'X-CSRFToken';
$http.defaults.xsrfCookieName = 'csrftoken';
}
на стороне Джанго, у меня есть вид входа, который прекрасно работает для ГЭТ, а не для метода пост. И вот где я потерялся.
class LoginView(views.APIView):
"""
View for login user
"""
queryset = BaseUser.objects.all()
def get(self, request, format=None):
print("get_login098765") # THIS IS PRINTED PERFECTLY
return Response()
def post(self, request, format=None): #THIS THROWS 403 ERROR
print("post_login098765") #THIS IS NOT PRINTED
return Response()
Что мне не хватает? Благодаря !
EDIT:
Я получаю файл с именем Войти содержащий: {"detail":"Authentication credentials were not provided."}
Вам нужно отправить токен csrf в заголовки. –
Проверьте мои изменения. Спасибо –
Вы видите токен csrf в заголовках полезной нагрузки запроса? Вы можете проверить инструменты разработчика. –