对于我的 Ionic2 应用程序,我需要下载发票,但仅适用于经过身份验证的用户。有什么办法吗?
我已经安装了 InAppBrowser cordova 插件,但它似乎不能用于发送带有请求的授权标头。
对于我的 Ionic2 应用程序,我需要下载发票,但仅适用于经过身份验证的用户。有什么办法吗?
我已经安装了 InAppBrowser cordova 插件,但它似乎不能用于发送带有请求的授权标头。
这对我有用:查找 (YourProject)\plugins\cordova-plugin-inappbrowser\src\android\InAppBrowser.java 文件并编辑它。
在文件末尾的 onReceivedHttpAuthRequest 中,您应该放置类似这样的内容。
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
// Check if there is some plugin which can resolve this auth challenge
String UserName = getUser();
String Password = getPass();
if (UserName != null && Password!= null) {
handler.proceed(UserName, Password);
return;
}
您可以将getUser()
and替换为getPass()
您的用户名和密码,以尝试是否有效,如果有效。创建从输入中检索数据的方法。
就我而言,我使用这个:
public void setUserPass(String username, String password) {
this.USUARIO = username;
this.CONTRASENA = password;
}
public String getUser() {
return this.USUARIO;
}
public String getPass() {
return this.CONTRASENA;
}
在包含 onReceivedHttpAuthRequest 方法的方法 InAppBrowserClient 之外。然后几乎在文档的顶部我在execute方法中写了这个(setUserPass(args.getString(3),args.getString(4));)
public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) throws JSONException {
if (action.equals("open")) {
this.callbackContext = callbackContext;
final String url = args.getString(0);
setUserPass(args.getString(3), args.getString(4));
String t = args.optString(1);
if (t == null || t.equals("") || t.equals(NULL)) {
t = SELF;
}
final String target = t;
然后你必须在最后编辑 (YourProject)\plugins\cordova-plugin-inappbrowser\www\inappbrowser.js 文件。
module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
// Don't catch calls that write to existing frames (e.g. named iframes).
if (window.frames && window.frames[strWindowName]) {
var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
return origOpenFunc.apply(window, arguments);
}
strUrl = urlutil.makeAbsolute(strUrl);
var iab = new InAppBrowser();
callbacks = callbacks || {};
for (var callbackName in callbacks) {
iab.addEventListener(callbackName, callbacks[callbackName]);
}
var cb = function(eventname) {
iab._eventHandler(eventname);
};
strWindowFeatures = strWindowFeatures || "";
exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures[0], strWindowFeatures[1], strWindowFeatures[2]]);
return iab;
};
最后,在 index.js 或控制您的应用程序的任何 js 中使用相同的调用,但您使用功能部分作为数组添加登录数据,如下所示:
window.open(url, '_blank', ['toolbar=no,presentationstyle=fullscreen,location=no,hardwareback=yes,hidden=no', username, password]);
要激活所有这些,您应该在控制台中构建项目。
希望这对某人有所帮助。
标头可以与请求一起发送兄弟,你试过这样吗:
import {Http, Headers} from 'angular2/http';
var headers = new Headers();
headers.append('Authorization', 'Bearer ' + this.authToken));
this.http.get('http://localhost:3333/getinfo', {headers: headers}).subscribe(data => {
console.log(data);
请查看 - http://tphangout.com/?p=162 (它提供了有关发出授权请求的简单说明)。希望这对您有所帮助。