2017-08-18 5 views
2

Ich arbeite an einer Website, auf der der Kunde nach einer Option gefragt hat, die die Anmeldung/Anmeldung über Google- und Facebook-Konten zulässt. Wie kann ich die E-Mail-Adresse aus dem Google-Profil eines Nutzers zum Speichern in einer Datenbank extrahieren?E-Mail-Adresse aus dem Google-Konto extrahieren

Hier ist mein Code. Das Problem ist, dass ich das Benutzerprofil nicht vollständig erhalte. Stattdessen erhalte ich nur den Benutzernamen.

try 
{ 
    WebClient client = new WebClient(); 
    var urlProfile = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" 
     + access_token; 

    string outputData = client.DownloadString(urlProfile); 

    GoogleUserOutputData serStatus = 
     JsonConvert.DeserializeObject<GoogleUserOutputData>(outputData); 

    if (serStatus != null) 
    { 
     return serStatus; 
     // You will get the user information here. 
    } 
} 
catch (Exception ex) 
{ 
    //catching the exception 
} 

return null; 

Antwort

1

Dies ist eine Möglichkeit, Daten zu empfangen (E-Mail, etc.) in JavaScript. Am Ende zeigt es eine Warnung mit Daten. (Sie können diese Daten in einer Datenbank speichern.) Dies ist ein vollständiges Arbeitsbeispiel mit einer Google-Schaltfläche.

<html> 

    <head> 
    <title>Demo: Getting an email address using the Google+ Sign-in button</title> 
    <!-- Include the API client and Google+ client. --> 
    <script src = "https://plus.google.com/js/client:platform.js" async defer></script> 
    </head> 

    <body> 
    <!-- Container with the Sign-In button. --> 
    <div id="gConnect" class="button"> 
     <button class="g-signin" 
      data-scope="email" 
      data-clientid="Your_Client_ID" 
      data-callback="onSignInCallback" 
      data-theme="dark" 
      data-cookiepolicy="single_host_origin"> 
     </button> 
     <!-- Textarea for outputting data --> 
     <div id="response" class="hide"> 
     <textarea id="responseContainer" style="width:100%; height:150px"></textarea> 
     </div> 
    </div> 
</body> 

    <script> 
    /** 
    * Handler for the signin callback triggered after the user selects an account. 
    */ 
     function onSignInCallback(resp) { 

    gapi.client.load('plus', 'v1', apiClientLoaded); 
    } 

    /** 
    * Sets up an API call after the Google API client loads. 
    */ 
     function apiClientLoaded() { 

    gapi.client.plus.people.get({userId: 'me'}).execute(handleEmailResponse); 
    } 

    /** 
    * Response callback for when the API client receives a response. 
    * 
    * @param resp The API response object with the user email and profile information. 
    */ 
    function handleEmailResponse(resp) { 
     var primaryEmail; 
     var name; 
     var gender; 

    for (var i=0; i < resp.emails.length; i++) { 
     if (resp.emails[i].type === 'account') 
      primaryEmail = resp.emails[i].value; 
     if (resp.displayName != null) 
      name = resp.displayName; 
     gender = resp.gender; 
    } 
    document.getElementById('responseContainer').value = 'Primary email: ' + 
      primaryEmail + '\n\nFull Response:\n' + JSON.stringify(resp); 
     ShowAlert("Email: "+primaryEmail +" "+"Name: "+ resp.displayName +" "+"Gender: "+gender); 
    } 

    </script> 

</html> 

Für weitere Informationen und Details Sie können (sollten) diesen Link lesen: Getting people and profile information

+1

Vielen Dank für Ihre Hilfe. Aber ich bekam immer noch einen Fehler, es wurde keine Antwort erhalten, dann habe ich die Lösung "Durch Aktivierung der Google+ API" in meinem Dashboard gefunden. Wenn jemand mit dem Problem konfrontiert ist, aktivieren Sie bitte Ihre Google+ API in Ihrem Google Developer-Konto. https://console.developers.google.com/projectselector/apis/library?pli=1 – MuhammadMohsan

+0

@MuhammadMohsan Ich habe Ihre Erweiterung der Antwort von Vinod kumar G akzeptiert, da Sie vermutlich zusätzlichen relevanten Code aus der Google-Referenzdokumentation entnommen haben. Im Allgemeinen sollten Sie dies jedoch nicht tun. Stattdessen sollten Sie Ihre * eigene * Antwort posten. Alternativ können Sie nach einer substanziellen Bearbeitung einen Kommentar zu der Antwort hinterlassen, in der die Person, die sie gepostet hat, aufgefordert wird, die Bearbeitung rückgängig zu machen, wenn sie sie nicht genehmigt. Aber bitte tu das nicht sehr oft. – DavidRR

1

Dokumentation ist der Schlüssel; Bitte überprüfe es vollständig.

https://developers.google.com/identity/sign-in/web/sign-in

<meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com"> 
<div class="g-signin2" data-onsuccess="onSignIn"></div> 
function onSignIn(googleUser) { 
    var profile = googleUser.getBasicProfile(); 
    console.log('ID: ' + profile.getId()); // Do not send to your backend! Use an ID token instead. 
    console.log('Name: ' + profile.getName()); 
    console.log('Image URL: ' + profile.getImageUrl()); 
    console.log('Email: ' + profile.getEmail()); // This is null if the 'email' scope is not present. 
} 
<a href="#" onclick="signOut();">Sign out</a> 

<script> 
function signOut() { 
    var auth2 = gapi.auth2.getAuthInstance(); 
    auth2.signOut().then(function() { 
     console.log('User signed out.'); 
    }); 
    } 
</script> 
+0

ich die Erweiterung von @MuhammadMohsan akzeptiert. Bitte führen Sie die Bearbeitung zurück, wenn Sie sie nicht genehmigen. – DavidRR