2017-10-12 8 views
0

Dies ist mein erster Beitrag. Ich werde versuchen und vollständig sein. Ich erstelle eine App in Meteor, die Google oAuth verwendet. Ich verwende die folgenden Pakete:Meteor Google oAuth, um accessToken ohne erneute Anmeldung zu aktualisieren

accounts-ui 
accounts-google 
service-configuration 
google-config-ui 

In meinem login.js ich habe:

Template.login.events({ 
    'click #googleLoginButton': function() { 
    Meteor.loginWithGoogle(
     { requestPermissions: ['email', 'profile'], 
     requestOfflineToken: 'true' 
     } 
    ); 
    } 
}); 

ich folgend in Mongo erhalten:

db.users.find({}).pretty(); 
{ 
    "_id" : "9TjGEjEj4ocFhwHtS", 
    "createdAt" : ISODate("2017-10-11T17:38:07.400Z"), 
    "services" : { 
     "google" : { 
      "accessToken" : "ya29.-REDACTED-T9z", 
      "idToken" : "eyJhbGcj-REDACTED-LTg", 
      "scope" : [ 
       "https://www.googleapis.com/auth/userinfo.email", 
       "https://www.googleapis.com/auth/userinfo.profile" 
      ], 
      "id" : "107113228066746203535", 
      "email" : "[email protected]", 
      "verified_email" : true, 
      "name" : "XXX XXX", 
      "given_name" : "XXX", 
      "family_name" : "XXX", 
      "picture" : "https://lh4.googleusercontent.com/.../photo.jpg", 
      "locale" : "en", 
      "gender" : "male", 
      "refreshToken" : "1/HG-REDACTED-oLq0USutc" 
     }, 
     "resume" : { 
      "loginTokens" : [ 
       { 
        "when" : ISODate("2017-10-11T21:47:38.471Z"), 
        "hashedToken" : "2lmOK-REDACTED-ptAyDnWo=" 
       } 
      ] 
     } 
    }, 
    "profile" : { 
     "name" : "XXX XXX" 
    } 
} 

In dem Server/Init.js Ich habe: (Ich übermittle die Google-Projekt-Informationen über settings.json)

configureGoogle = function(config) { 
    ServiceConfiguration.configurations.remove({ 
     service: "google" 
    }); 

    ServiceConfiguration.configurations.insert({ 
     service: "google", 
     clientId: googleConfig.clientId, 
     secret: googleConfig.secret 
    }); 
    return; 
}; 

if (googleConfig) { 
    console.log('Got settings for google', googleConfig) 
    configureGoogle(googleConfig); 
} 

So scheinen die Dinge zu funktionieren. Ich kann mich einloggen/raus und wenn ich mich anmelde bekomme ich neue Token. Ich benutze die accessToken für API-Anrufe an anderen Orten. Das Problem, das ich habe, ist, dass das Token nach einer Stunde abläuft und die API-Aufrufe fehlschlagen.

Ich möchte die accessToken kurz vor Ablauf aktualisieren und kann nicht herausfinden, wie. Ich möchte auch eine Abmeldung nach 24 Stunden erzwingen, damit das Token nicht für immer aktualisiert wird.

Jede Hilfe, wenn geschätzt.

+1

Ich denke, dies wurde bereits beantwortet: https://stackoverflow.com/questions/32764769/meteor-accounts-google-token-expires –

+1

Mögliche Duplikat [Meteor Konten-google Token Verfällt] (https: // stackoverflow.com/questions/32764769/meteor-accounts-google-token-expires) –

Antwort

1

Update # 1

Dank Derek Brown unten für mich in der richtigen Richtung. Das brachte mich dazu, nach einem Meteor Google API zu suchen. Ich fand dieses: percolate:google-api

und nach ihm doc es tut, was ich suchte:

Wenn das Zugriffstoken des Benutzers abgelaufen ist, wird es die exchangeRefreshToken Methode transparent rufen Sie einen neuen Aktualisierungs-Token zu erhalten .

Ich lief dann in einen Fehler, wo der ExpiresAT Didnt existieren in meinem mongodb und Dinge funktionierten nicht. Ich fand dann diesen Beitrag: Google-API die vorgeschlagen:

server/publish.js

Meteor.publish(null, function() { 
    return Meteor.users.find(this.userId, { fields: { 
    'services.google.accessToken': 1, 
    'services.google.expiresAt': 1 
    }}); 
}); 

ich eine Änderung auch von Code oben gemacht: Client/login.js

Template.login.events({ 
    'click #googleLoginButton': function() { 
    Meteor.loginWithGoogle(
     { requestPermissions: ['email', 'profile'], 
     requestOfflineToken: 'true', 
     forceApprovalPrompt: 'true' //<==== This is the change 
     } 
    ); 
    } 
}); 

Diese addierte ohne zusätzlichen Code geändert, fügte dieser die expiresAt hinzu und bevölkerte es.

Im letzten Test jetzt. Ich werde aktualisieren.

+0

Ich stehe vor dem gleichen Problem. Das Hinzufügen von forceApprovalPrompt hat nicht geholfen.Haben Sie etwas anderes zu diesem Thema gefunden? –

Verwandte Themen