从Google帐户中提取电子邮件地址

时间:2017-08-18 12:16:06

标签: javascript c# asp.net google-api

我正在一个网站上工作,客户要求提供允许使用Google和Facebook帐户进行注册/登录的选项。如何从用户的Google个人资料中提取电子邮件地址以存储在数据库中?

这是我的代码。问题是我没有完全获得用户配置文件。相反,我只收到用户名。

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;

2 个答案:

答案 0 :(得分:1)

文件是关键;请完整检查。

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>

答案 1 :(得分:1)

这是一种在JavaScript中接收数据(电子邮件等)的方法。最后,它显示了一个包含数据的警报。 (您可以将此数据存储在数据库中。)这是一个带有Google按钮的完整工作示例。

<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>

有关详细信息和详细信息,您可以(应该)阅读此链接: Getting people and profile information