XMLHttpRequest 基本身份验证失败

问题描述 投票:0回答:2

知道为什么在

XMLHttpRequest
 中使用正确凭据的 
Pebble JS Framework
在 Android 上无法进行基本身份验证,但在 iOS 上却可以工作吗?

完全相同的代码,大致如下:

var req = new XMLHttpRequest();
req.open(method, url, true, user, pass);
req.send(data);
req.onreadystatechange = function() { ... }

从 Android Pebble 应用程序返回 401,但在 iOS 中验证正确。

ajax xmlhttprequest pebble-watch pebble-sdk
2个回答
17
投票

我找到了一个在 Android 上适合我的解决方法。

不知道为什么但直接经过身份验证的请求:

    req.open(method, fullurl, true, user, pass);
    req.send(data);

对我不起作用 - 它总是返回 401。所以我尝试通过标头设置基本身份验证:

    req.open(method, fullurl, true);
    req.setRequestHeader("Authorization", "Basic " + Base64.encode(user + ":" + pass)); 
    req.send(data);

(其中 Base64 取自此处:https://stackoverflow.com/a/246813/961695)——它成功了!也许 Android 上的 XmlHttpRequest 实现存在错误。


0
投票

如果请求通过 cookie/headers 进行身份验证,我们可以设置 headers 并使该请求 withCredentials 值为 false。

withCredentials 属性在 IOS 中必须为 false,否则,您可能会从服务器收到 401 响应。

注意:- 在 Android 和 Web 平台中也无需“withCredentials”属性即可工作

 req.open(method, fullurl, true);
 req.setRequestHeader("Cookie", "CookieInfo")); 
 req.send(data);    
 request.withCredentials = false;
© www.soinside.com 2019 - 2024. All rights reserved.