我收到方法选项并返回undefined

时间:2014-03-03 11:09:47

标签: json angularjs http login put

我正在写我的登录表单,它向服务器提供了一个put请求。

通信协议是JSON

我必须使用带有SHA-256哈希算法的CryptoJS发送用户名和密码哈希值。

身份验证数据必须作为cookie加密存储在浏览器中,并且每个请求都作为身份验证的基础发送到服务器,当您关闭浏览器窗口时,必须删除数据。

示例put request:

PUT my api adress

{"loginRequest": {
"username": "admin",
"hash": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"

}}

回复确定 代码:200

{"loginResponse": {
"username": "admin",
"name": "Example Admin",
"roles": [
    "USER", "ADMIN"
],
"lastLogin": "2014-02-17+01:00",
"backendVersion": "katconnect-backend-0.0.1-SNAPSHOT"

}}

响应数据验证错误(URI用户名<> JSON用户名) 代码:400

{"error": {
"code": "400",
"message": "the message of the error"

}}

响应身份验证错误(用户名或哈希值为空,找不到用户,哈希值错误) 代码:401

{"error": {
"code": "401",
"message": "Username or password false"

}}

这是我的代码:

angular.module('validationApp')

.controller('loginCtrl',function ($scope,$http,Base64,$cookieStore) {

$scope.login = function () {
        var user = {
            username: $scope.username,
            hash: CryptoJS.SHA256($scope.password)
        };
        var loginRequest = JSON.stringify(user);
        var credentials = Base64.encode($scope.username + ':' + $scope.password);

     $http({
            method: 'PUT',
            url: url+'/users/'+ $scope.username +'/login',
            data: loginRequest,
            headers:{'Content-Type': 'application/json'}
            })


                .success(function (){
                    $http.defaults.headers.common['Authorization'] = 'Basic ' + credentials;
                    $cookieStore.put( authCookieKey ,credentials);
                })
                .error(function(code){
                if (401 === code) {
                    $scope.invalidUsernamePassword = true;
                    }
                })


    };

})

1 个答案:

答案 0 :(得分:0)

您正在向API服务器发送跨域请求。浏览器首先发送选项请求以查看是否允许HTTP方法。您是否从服务器设置了CORS中间件?如果是,请检查方法PUT是否在whitlist中。

http://better-inter.net/enabling-cors-in-angular-js/