我尝试了angular.js,并从一个restful api的web-ui开始(使用超文本传输协议基本授权)。这真的很好,除了授权工作。
到目前为止,我使用的是$http。默认值。标题。常见的授权
设置密码,但大多数情况下浏览器会打开http basic auth的默认登录表单。另一个奇怪的行为是angular请求不包含授权头(选项和GET请求都不包含)。我还尝试使用header配置在每个请求上设置此header,但这也不起作用。
有一些特殊的标题我必须设置吗?或者我必须设置$http。默认值。标题。常见的在特殊情况下授权
?
tools.factory('someFactory', function ($http, Base64) {
//...
factory.checkAuth = function (username, password) {
storeCredentials(username, password);
factory.initConnection();
return factory.getData();
};
factory.initConnection = function(){
var credentials = loadCredentials();
factory.authHeader = 'Basic ' + Base64.encode(credentials.username + ':' + credentials.password);
$http.defaults.headers.common.Authorization = factory.authHeader;
};
factory.getData = function () {
return $http({
method: 'GET',
url: urlBase + '/happening',
headers: {
// 'Authorization': factory.authHeader
}
});
};
选项 /v8/happeningHTTP/1.1
主机:api.gospry.com
连接:保活访问控制请求方法:GET
起源:http://web.gospry.com
用户代理:[...]访问-控制-请求-报头:接受,授权
接受:*/*
引用:http://web.gospry.com/
接受-编码:gzip,收缩,sdch
接受-语言:en-US, en; q=0.8
后端稍作修改以支持CORS(访问控制头和飞行前请求支持)。
HTTP/1.1 401未经授权的
服务器:Apache Coyote/1.1
访问控制允许来源:http://web.gospry.com
访问控制允许方法:POST、GET、PUT、PUSH、OPTIONS、DELETE
访问控制最大年龄:3600
访问控制允许标题:来源、X-request-With、内容类型、授权
X-Content-Type-OPTIONS:nosniff
X-XSS-Protection:1;模式=块
缓存控制:无缓存,无存储,最大年龄=0,必须重新验证
Pragma:无缓存
过期:0
严格的传输安全:最大年龄=31536000;includeSubDomains
X-Frame-Options:DENY
设置Cookie:JSESSIONID=2ddc92a1b0dc57c21cdc3b7a5dc1314;路径=/v8/;保护HttpOnly
WWW-Authenticate:Basic realm=“realm”
X-Content-Type-Options:nosniff
缓存控制:无缓存,无存储,最大年龄=0,必须重新验证
Pragma:no-Cache
过期:0
X-Frame-Options:DENY
允许:获取,头,发布,放置,删除,跟踪,选项,补丁
内容长度:0
日期:Wed,2015年4月8日18:04:04 GMT
您在登录表单中描述的问题将在AngularJS使用ngResource的技巧和技巧中进行解释,并提供解决方法。请参阅基本身份验证部分:
如果合适的话,一个解决方法是告诉你的网络服务器在认证失败时返回401以外的东西,然后从那里开始。在AngularJS中,500(例如)将导致$超文本传输协议被拒绝,您可以随心所欲地处理它。如果您确实需要出现登录提示,则不建议这样做!
我使用拦截器。我无法在您的代码中发现问题,但我使用的是:
authModule.factory('CeradAuthInterceptor',
['CeradAuthManager', function ( authManager)
{
return {
request: function (config)
{
config.headers = config.headers || {};
if (authManager.authToken)
{
config.headers.Authorization = 'Bearer ' + authManager.authToken;
}
return config;
}
};
}]);
appModule.config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push('CeradAuthInterceptor');
}]);
问题内容: 我有一个现有的angularjs代码,可以进行HTTP GET。下面提取的是控制器内部的一些相关代码。 我想将HTTP基本身份验证添加到HTTP GET。用户名为,密码为。如何才能做到这一点? 问题答案: 因为在基本身份验证中,用户名和密码由base64解码。您首先需要找到一个图书馆来完成这项工作。 https://github.com/ninjatronic/angular- bas
问题内容: 因为在AngularJS中使用CORS和http身份验证可能会比较棘手,所以我编辑了问题以分享一个经验教训。首先,我要感谢igorzg。他的回答对我很有帮助。场景如下:您想使用AngularJS $ http服务将POST请求发送到另一个域。获取AngularJS和服务器设置时,需要注意一些棘手的事情。 第一:在您的应用程序配置中,您必须允许跨域调用 第二:您必须指定withCrede
问题内容: 我想写书,所使用的一个一个的NodeJS REST的API服务器Joyent的,并且一切正常,除了我无法验证普通用户的身份验证。如果我跳到终端并执行,则无法在NodeJS http服务器上获取值username:password。如果我的NodeJS http服务器类似于 ,是否应该在来自回调的 req 对象中某处获取值username:password ?如何获得这些值而不必使用Co
问题内容: 如何在Golang网站上实施基本身份验证?这样,当有人访问某个页面时,他们的 浏览器 会提示他们登录。 问题答案: 为了强制用户进行身份验证/在用户浏览器中显示基本身份验证提示,请发送标头 因此,如果您有通话,您可以 这将导致浏览器打开您所指的提示。
问题内容: 以下代码成功连接到我的Ruby on Rails API,并使用AFNetworking返回JSON。我需要做什么来进行编辑以传递用户名和密码,以便我的API可以使用HTTP基本身份验证? 我已经阅读了他们的文档,但是我对Objective-C和AFNetworking还是陌生的,目前还没有意义。 问题答案: AFNetworking 2.x的答案已更新 对于AFNetworking
我不熟悉RESTful API的概念。 我正在为一家在线商店设计一个RESTful API。 我没有正确理解SSL上的基本HTTP身份验证的概念。 这是否意味着对于每个请求,用户都必须再次输入他/她的用户名和密码? 有人能详细解释它的功能和用途吗?