2017-11-09 7 views
1

Hallo, wir haben den folgenden Ablauf verwendet, um ein benutzerdefiniertes Chrome-Anmeldeereignis auszulösen, wenn der Kunde bekannt ist. Vor kurzem sind wir auf diese Warnung gestoßen.Automatische Chrome-Anmeldung - Verwerfen "PasswordCredential" -Objekte in "Fetch - Howto Solve" übergeben?

(index):1259 [Deprecation] Passing 'PasswordCredential' objects into 'fetch(..., { credentials: ... })' is deprecated, and will be removed in M62, around October 2017. See https://www.chromestatus.com/features/5689327799500800 for more details and https://developers.google.com/web/updates/2017/06/credential-management-updates for migration suggestions.

Wir verwenden die folgenden, den Kunden anzumelden.

Meine Frage ist: 1) Wie können wir das oben genannte 'Deprecation' Problem mildern/lösen? Und 2) Gibt es eine nativere/Standardmethode, um nach einer Anmeldebestätigung zu fragen? (Pref. In der Benutzer eigene Browser-Sprache)

<script> 
window.onload = function(e) { 
    var debug = false; 
    var _waitandaskagain = 1800; 
    var start = new Date() 
    var _askforconfirmation = false; 
    var cookie_name = "smartlock_cancel_cookie"; 
    var smartlock_cancel_cookie = getCookie(cookie_name); 
    if (smartlock_cancel_cookie) { 
    return 
    } else { 
     navigator.credentials.get({ 
      password: true, 
     }).then(function(cred) { 
      if (cred) { 
       if (cred.type == 'password') { 
        var form = new FormData(); 
        cred.additionalData = form; 
        cred.additionalData.append("form_key", "SECRET"); 
        var url = 'https://ourdomain.com/webcustomer/account/loginpostgoogle/'; 
        if (_askforconfirmation && confirm('Logon to the website securely? Please Confirm')) { 
         fetch(url, { 
          method: 'POST', 
          credentials: cred 
         }).then(function(response) { 
          if (response.status == 202) { 
           if (debug) { 
            console.log('Login success; reloading now'); 
            return; 
           } 
           navigator.credentials.store(cred); 
           window.location.reload(); 
          } 
          if (debug) { 
           console.log('Server status: ' + response.status); 
          } 
          return; 
         }).catch(function(err) { 
          console.log('Smartlock Ajax error:' + err.message); 
         }).then(always, always); 
        } else { 
         expiry.setDate(start.getDate() + (_waitandaskagain)); 
         document.cookie = cookie_name+"=true; expires=" + expiry.toGMTString() + "; path=/"; 
         return; 
        } 
       } 
      } else if (typeof cred === "undefined") { 
       var end = new Date(); 
       if (+end >= (+start + 100)) { 
        if (debug) { 
         console.log('Manual cancel detected - too slow'); 
        } 
        expiry.setDate(start.getDate() + (_waitandaskagain)); 
        document.cookie = cookie_name+"=true; expires=" + expiry.toGMTString() + "; path=/"; 
       } 
       if (debug) { 
        console.log('Credentials undefined'); 
       } 
       return; 
      } 
     }); 
    } 
} 

Antwort

0

1) Schicken Sie Credential-Objekt nicht in dem holen, anstatt manuell in das Formular anhängen (oder JSON), Objekt Dinge aus dem Credential-Objekt

fetch(url, { 
    method: 'POST', 
    credentials: cred // NO 
} 

// example with JSON 
fetch(url, { 
    method: 'POST', 
    body: JSON.stringify({ 
     pass: cred.password, 
     id: cred.id, 
     "form_key": "SECRET" 
    }) 
} 

2) Es in dieser Hinsicht kein Standard ist, ist UX komplett an Ihnen