应用程序被杀死时 Cordova inappbrowser cookies
Cordova inappbrowser cookies when application is killed
在我的 Cordova 应用程序中,我尝试使用 inappbrowser 打开 link。
此 link 指向在访问页面之前需要 google 身份验证的域。如果我尝试再次打开 link,域不需要再次进行身份验证,会话正常,效果很好。
我的问题发生在我终止应用程序时。如果我想再次进入 link,请 Google 再次要求我进行身份验证。我不想那样做。
有没有办法保存inappbrowser插件的cookies?
提前致谢!
这只是我想分享的一个想法(从未测试过):
来自documentation :
var ref = window.open(url, target, options);
- 选项
clearcache:设置为yes在新window之前清除浏览器的cookie缓存已开
clearsessioncache: 设置为 yes 在打开新 window 之前清除会话 cookie 缓存
我认为值得尝试使用这些选项,看看会发生什么。
我遇到了同样的问题(在 android 上)并意识到我正在使用的库 (ngCordova / cordovaOauth) 正在删除缓存和会话数据(使用 window.open(..., ..., 'clearsessioncache=yes,clearcache=yes')
.
所以它现在可以工作了:我使用的登录名被记住了,我不必再次重新输入我的密码。所以 cookies 肯定会保留,至少在 android.
如果您有兴趣,这里是 ngCordova 中的相关代码:
var redirect_uri = "http://localhost/callback";
if(options !== undefined) {
if(options.hasOwnProperty("redirect_uri")) {
redirect_uri = options.redirect_uri;
}
}
var browserRef = window.open('https://accounts.google.com/o/oauth2/auth?client_id='
+ clientId + '&redirect_uri=' + redirect_uri
+ '&scope=' + appScope.join(" ")
+ '&prompt=select_account&response_type=token', '_blank',
'location=no');
browserRef.addEventListener("loadstart", function(event) {
if((event.url).indexOf(redirect_uri) === 0) {
browserRef.removeEventListener("exit",function(event){});
browserRef.close();
var callbackResponse = (event.url).split("#")[1];
var responseParameters = (callbackResponse).split("&");
var parameterMap = [];
for(var i = 0; i < responseParameters.length; i++) {
parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
}
if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
deferred.resolve({ access_token: parameterMap.access_token, token_type: parameterMap.token_type, expires_in: parameterMap.expires_in });
} else {
deferred.reject("Problem authenticating");
}
}
});
browserRef.addEventListener('exit', function(event) {
deferred.reject("The sign in flow was canceled");
});
我对其进行了一些修改以满足我的需要。您会在第 200 行附近找到原始 here(查找 google:
)。
在我的 Cordova 应用程序中,我尝试使用 inappbrowser 打开 link。 此 link 指向在访问页面之前需要 google 身份验证的域。如果我尝试再次打开 link,域不需要再次进行身份验证,会话正常,效果很好。
我的问题发生在我终止应用程序时。如果我想再次进入 link,请 Google 再次要求我进行身份验证。我不想那样做。
有没有办法保存inappbrowser插件的cookies?
提前致谢!
这只是我想分享的一个想法(从未测试过):
来自documentation :
var ref = window.open(url, target, options);
- 选项
clearcache:设置为yes在新window之前清除浏览器的cookie缓存已开
clearsessioncache: 设置为 yes 在打开新 window 之前清除会话 cookie 缓存
我认为值得尝试使用这些选项,看看会发生什么。
我遇到了同样的问题(在 android 上)并意识到我正在使用的库 (ngCordova / cordovaOauth) 正在删除缓存和会话数据(使用 window.open(..., ..., 'clearsessioncache=yes,clearcache=yes')
.
所以它现在可以工作了:我使用的登录名被记住了,我不必再次重新输入我的密码。所以 cookies 肯定会保留,至少在 android.
如果您有兴趣,这里是 ngCordova 中的相关代码:
var redirect_uri = "http://localhost/callback";
if(options !== undefined) {
if(options.hasOwnProperty("redirect_uri")) {
redirect_uri = options.redirect_uri;
}
}
var browserRef = window.open('https://accounts.google.com/o/oauth2/auth?client_id='
+ clientId + '&redirect_uri=' + redirect_uri
+ '&scope=' + appScope.join(" ")
+ '&prompt=select_account&response_type=token', '_blank',
'location=no');
browserRef.addEventListener("loadstart", function(event) {
if((event.url).indexOf(redirect_uri) === 0) {
browserRef.removeEventListener("exit",function(event){});
browserRef.close();
var callbackResponse = (event.url).split("#")[1];
var responseParameters = (callbackResponse).split("&");
var parameterMap = [];
for(var i = 0; i < responseParameters.length; i++) {
parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
}
if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
deferred.resolve({ access_token: parameterMap.access_token, token_type: parameterMap.token_type, expires_in: parameterMap.expires_in });
} else {
deferred.reject("Problem authenticating");
}
}
});
browserRef.addEventListener('exit', function(event) {
deferred.reject("The sign in flow was canceled");
});
我对其进行了一些修改以满足我的需要。您会在第 200 行附近找到原始 here(查找 google:
)。