2015-06-11 5 views
1

В приложении «Кордова» я пытаюсь открыть ссылку с помощью inappbrowser. Эта ссылка указывает на домен, которому требуется проверка подлинности Google перед доступом к странице. Если я попытаюсь снова открыть ссылку, домен не нуждается в повторной аутентификации, сеанс в порядке, это работает очень хорошо.Кордова inappbrowser cookie, когда приложение убито

Моя проблема произошла, когда я убью приложение. Если я хочу снова перейти по ссылке, Google попросит меня снова подтвердить подлинность. И я не хочу этого делать.

Есть ли способ сохранить файлы cookie плагина inappbrowser?

Спасибо заранее!

ответ

2

У меня была такая же проблема (на андроид) и понял, библиотеку, я использую (ngCordova/cordovaOauth) удалял кэш и данные сессии (с использованием window.open(..., ..., 'clearsessioncache=yes,clearcache=yes')

Так работает сейчас:. Входа в систему (ы) I использование запоминается, и мне не нужно снова вводить мой пароль, поэтому cookie определенно хранится, по крайней мере, на 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"); 
}); 

Я немного изменил его в соответствии с моими потребностями. Вы найдете оригинал here, вокруг линии 200 (ищите google:).

+0

У меня такая же проблема в IOS 10. У вас есть решение для IOS –

2

Это не просто идея, которую я хотел бы поделиться (не проверялись):

От documentation:

var ref = window.open(url, target, options); 
  • варианты

ClearCache: установлен да иметь кэш куки браузера очищается перед открывается новое окно

clearsessioncache: значение Да, чтобы кэш куки сессии очищается перед открывается новое окно

Я думаю, что это стоит попробовать сыграть с этими опциями и посмотреть, что происходит.

+0

Уже пробовал, и он не работал. Но спасибо за вашу помощь! :). –

Смежные вопросы