我正在写我的登录表单,它向服务器提供了一个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;
}
})
};
})
答案 0 :(得分:0)
您正在向API服务器发送跨域请求。浏览器首先发送选项请求以查看是否允许HTTP方法。您是否从服务器设置了CORS中间件?如果是,请检查方法PUT是否在whitlist中。