我想做一個非常簡單的登錄表單使用angular.js在前端和api休息在後端。這裏是HTML端形式:403錯誤與angular.js文章和Django休息框架
<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>
,這裏是我的角度控制器(注:我知道這裏沒有問題,因爲我有一個非常類似的一個寄存器功能工作得很好):
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';
}
在Django的一面,我有一個完美的作品爲GET而不是POST方法登錄視圖。這就是我迷失的地方。
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()
我錯過了什麼?謝謝 !
編輯:
我收到一個名爲登錄一個文件,其中包含:{"detail":"Authentication credentials were not provided."}
您需要在標題中發送csrf標記。 –
請檢查我的編輯。謝謝 –
您是否在請求負載的標頭中看到csrf標記?您可以簽入開發者工具。 –