【问题标题】:Can my extension get a user's e-mail address from Google Chrome?我的扩展程序可以从 Google Chrome 获取用户的电子邮件地址吗?
【发布时间】:2012-05-10 18:36:16
【问题描述】:

我有一个扩展程序,一些用户为此付出了金钱或努力。我希望能够通过他们的电子邮件地址来识别这些用户,所以我可以显示“谢谢!”下次他们加载扩展程序时。

有什么方法可以从谷歌浏览器获取用户的电子邮件地址?

【问题讨论】:

  • 为什么不直接问他们呢?这不是更多的向上和向上吗?
  • 我试图避免额外的用户交互。我估计只有大约 0.1% 的用户实际做出了贡献。我很犹豫是否要求 100% 的用户输入他们的电子邮件,只是为了发现它不相关。但你是对的 - 这是我的“B计划”。

标签: google-chrome-extension


【解决方案1】:

好的,解决了她。这个网站基本上是这样描述的:

http://smus.com/oauth2-chrome-extensions/

但并非所有内容都在此处进行了解释。所以:

首先,您需要一个 API 客户端 ID 和客户端密码,以便用户授权您使用他们的详细信息。以下步骤将以适用于 chrome 扩展的方式进行设置:

  1. Google API 控制台
  2. 创建 API
  3. 转到 API 访问
  4. 创建客户端 ID
  5. 给它一个名称和一个徽标,当用户被要求允许您的应用程序检索他们的详细信息时,将显示此名称和徽标。下一个
  6. 选择网络应用程序
  7. 点击更多获取URI和授权的javascript来源
  8. 将重定向 URI 设置为 http://www.google.com/robots.txt
  9. 删除 javascript origins 字段以便没有
  10. 单击“确定”或其他任何内容,复制客户端 ID 和客户端密码以供以后使用。

其次,您需要 oauth2 javascript 库,该库可在此处获得: https://github.com/borismus/oauth2-extensions/tree/master/lib

您需要将它放在一个名为 oauth2 的文件夹中,该文件夹与您的 html 文件位于同一目录中。

在你的 html 文件中添加以下内容:

<script type="text/javascript" src="oauth2/oauth2.js"></script>
<script type="text/javascript">
var googleAuth = new OAuth2('google', {
  client_id: ' $(YOUR CLIENT ID HERE) ',
  client_secret: ' $(YOUR CLIENT SECRET HERE) ',
  api_scope: 'https://www.googleapis.com/auth/userinfo.email'
});

googleAuth.authorize(function() {
  // We should now have googleAuth.getAccessToken() returning a valid token value for us 
  // Create an XMLHttpRequest to get the email address 
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() { 
    if( xhr.readyState == 4 ) {
      if( xhr.status == 200 ) { 
        var parseResult = JSON.parse(xhr.responseText);
        // The email address is located naw: 
        var email = parseResult["email"];
      }
    }
  }
  // Open it up as GET, POST didn't work for me for the userinfo 
  xhr.open("GET","https://www.googleapis.com/oauth2/v1/userinfo",true);
  // Set the content & autherization 
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.setRequestHeader('Authorization', "OAuth " + googleAuth.getAccessToken() );
  xhr.send(null);
  // Debugging stuff so we can see everything in the xhr.  Do not leave this in production code 
  console.log(xhr);
});</script>

在你的 manifest.json 中你需要:

“权限”:[“https://accounts.google.com/o/oauth2/token”、“https://www.googleapis.com/oauth2/v1/userinfo”]

您还需要在清单文件中:

"content_scripts": [   {
    "matches": ["http://www.google.com/robots.txt*"],
    "js": ["oauth2/oauth2_inject.js"],
    "run_at": "document_start"   }

这应该很照顾它。

【讨论】:

  • 那么用户安装扩展后需要接受权限,还是安装扩展默认接受?
  • 但是如果我不使用 js 库呢?我的意思是,我们确实有身份验证步骤,...在这里:developer.chrome.com/apps/tut_oauth 我对吗?我们也可以使用它进行授权发布吗?
【解决方案2】:

我正在尝试自己做一些类似的事情。我正在尝试获取基于他们的谷歌帐户的 ID,以便我可以为用户存储一些云数据。我相信您可以通过相同的方法获取电子邮件地址,但他们必须批准权限。如果我成功了,我会发布代码。现在我试图得到: http://smus.com/oauth2-chrome-extensions/

使用我自己的 google api 密钥和那个。

到目前为止还没有取得太大的成功。花了最后两个小时实现了唯一具有良好文档的方法,它告诉我该功能已贬值。毕竟,可能必须尝试让这个 oauth2 垃圾工作。

【讨论】:

  • 是的,我期待 OAuth 基本上是解决方案;但是通过阅读 Google Chrome Extensions 网站中“OAuth for applications”的文档,不清楚我是要针对 Google Chrome 进行身份验证,还是必须针对每个用户的电子邮件地址提供商进行身份验证。跨度>
  • @scraimer 你有没有想过用户是否必须单独进行身份验证?
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多