2017-09-22 2 views
1

Je travaille sur une extension Chrome qui nécessitera que l'utilisateur se connecte à un compte afin de voir leur contenu. Ce que je veux faire, c'est empêcher l'utilisateur de se connecter à chaque fois en sauvegardant une sorte de cookie ou localStorage avec les données de connexion/session pertinentes une fois qu'il se connecte. Jusqu'à présent, après un peu de recherche, il semble que l'utilisation de l'API de stockage local Google Chromes serait la meilleure façon de le faire (ce serait génial si quelqu'un pouvait le confirmer).Extension Chrome - enregistrement des détails de connexion pour le popup

Mon problème est avec le réglage et l'obtention du stockage local. J'ai installé un scénario de stockage local factice ici juste pour essayer d'obtenir Chrome pour stocker tout type de stockage local pour l'extension:

Popup.js:

function setCookie(){ 
    chrome.extension.sendMessage({name: 'setLoginCookie'}, function(otherResponse) { 
     console.log(otherResponse) 
    }) 
} 

function getCookie(){ 
    chrome.extension.sendMessage({name: 'getloginCookie'}, function(response) { 
     alert(response) 
    }) 
} 

event.js:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 

    if (request.name == 'setLoginCookie') { 
     var obj = {test:"test"}  
     chrome.storage.sync.set(obj, function() { 
      alert('Data saved'); 
     });   
    }  

    if (request.name == 'getLoginCookie') { 
      chrome.storage.sync.get('test', function(data) { 
       sendResponse({ screenshotUrl: data.test }); 
     })  
    } 
    return true; 

}); 

Lorsque la fonction setCookie est exécutée, j'obtiens l'alerte 'data saved!' ce qui m'indiquerait qu'il a fonctionné mais quand je vérifie le stockage local sur mes extensions dev outils de chrome il n'y a rien là et si j'appelle la fonction getCookie alors il ne ramasse rien.

Voici les autorisations dans mon manifest.json:

"permissions": [ 
    "storage", 
    "cookies",  
    "tabs", 
    "<all_urls>", 
    "pageCapture", 
    "downloads"  
    ], 

Ai-je utilisé ici la mauvaise approche? Est-ce que l'utilisation chrome.storage.sync peut-être où je me suis trompé?

Merci

+1

1. [Inspecter le fichier chrome.storage.sync lors du débogage de l'extension Chrome] (// stackoverflow.com/a/32471596) 2.comment invoquez-vous getCookie? – wOxxOm

+0

Pourquoi ne stockez-vous pas les données directement dans la fenêtre contextuelle? 'chrome.storage.local' est disponible dans n'importe quelle page du contexte d'arrière-plan (y compris les popups) et les scripts de contenu. – Makyen

Répondre

1

chrome.storage.sync n'est pas la même chose que le stockage local, vous ne verrez pas les données enregistrées en utilisant cette méthode dans les outils de dev Local Storage.

Vous avez une différence de message. Vous utilisez {name: 'getloginCookie'} pour envoyer le message et l'instruction if vérifie getLoginCookie. La différence est l dans le paramètre que vous passez à la fonction sendMessage.

+0

C'était le problème et un bon endroit. Erreur stupide en mon nom. Donc, acceptez-vous que l'utilisation de chrome.storage.sync est la bonne façon de stocker les détails de connexion/session? –

+0

@BenLiger avez-vous donc conclu que nous pouvons utiliser un autre moyen pour enregistrer la session connectée dans l'extension chrome? Je ne sais pas, sinon stocker le mot de passe de l'utilisateur dans le stockage local que comment stocker la session afin d'empêcher la reconnexion? –

+0

@Hafizallylalani Vous pouvez en savoir plus sur le stockage dans les extensions chrome à partir d'ici https://developer.chrome.com/apps/storage – Titus

1

quand je vérifie le stockage local sur mes extensions outils de dev de Chrome il n'y a rien

Dev Tools ne pas exposer chrome.storage à l'intérieur. L'élément "Stockage local" expose localStorage à la place.

Pour inspecter le chrome.storage d'un poste, vous pouvez utiliser Storage Area Explorer extension ou simplement appeler le chrome.storage.sync.get(null, (data) => { console.log(data) }) à partir de la console.


Remarque: vous ne devez pas déléguer le travail avec chrome.storage à votre page d'événement. chrome.storage est directement accessible à partir de tous les contextes d'extension - arrière-plan, popup, options, scripts de contenu. Ne couchez pas sur la messagerie juste pour cela.

+0

Ok, je viens de voir que l'extension Last Pass a du stockage de session dans leur extension alors je me demande comment ils l'ont fait! –

+1

Vous pouvez utiliser 'sessionStorage' /' localStorage' depuis l'intérieur d'une extension, mais il est lié au domaine, donc il n'est pas partagé avec les scripts de contenu. 'chrome.storage' est une API plus récente qui est partagée entre ceux-ci. – Xan