如何检测电子邮件是否为Google帐户?

时间:2010-11-24 06:00:15

标签: api openid single-sign-on google-account

我和这里的一些人正在努力创业。我们目前正在使用Google OpenID API管理注册和登录我们的应用,但我们希望迁移到更简单的用户注册模式。为此,我们需要知道是否有一种方法可以检测到电子邮件(不是gmail)是否已经是Google帐户。有没有办法从Google Single Sign-on API获取此信息?

感谢您的帮助! :)

6 个答案:

答案 0 :(得分:11)

如果您使用的是Mac,请打开终端并输入$ host {example.com}以确定他们的电子邮件是否由Google托管。

例如:

$ host yelp.com
yelp.com has address 104.16.57.23
yelp.com has address 104.16.56.23
yelp.com mail is handled by 1 ASPMX.L.GOOGLE.com.
yelp.com mail is handled by 10 ASPMX2.GOOGLEMAIL.com.
yelp.com mail is handled by 10 ASPMX5.GOOGLEMAIL.com.
yelp.com mail is handled by 10 ASPMX3.GOOGLEMAIL.com.
yelp.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.com.
yelp.com mail is handled by 10 ASPMX4.GOOGLEMAIL.com.
yelp.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.com.

答案 1 :(得分:4)

这不是一个完整的解决方案,但您可以通过查看其域名的MX记录来判断某人是否在Google Apps上。答案中的链接对我不起作用,因此这可能是更好的解决方案。

答案 2 :(得分:2)

你做不到。我不认为谷歌会在没有用户同意的情况下告诉你。

但是,您可以将此域用作发现网址,以查看该域是否为Google Apps域: https://www.google.com/accounts/o8/site-xrds?hd=mail.moztw.org

注意域的管理员可能未正确安装域的OpenID支持。我的幻灯片详细讨论了这个: http://www.slideshare.net/timdream/google-apps-account-as-openid

答案 3 :(得分:0)

我这样做是通过一个虚拟文件,我使用addViewer函数添加电子邮件地址。我试着这样做......抓住。如果发现错误,我将我的本地标记设置为“不是谷歌帐户”。如果没有错误,我将其删除为我的虚拟文件的查看者,并设置我的标记,说该电子邮件地址是一个合法的谷歌帐户。

答案 4 :(得分:0)

我制定了道格的建议并且它有效。只需确保调用该函数的(有效)用户有权调用addViewer。实现此目的的一个技巧是确保从触发例程调用例程,因此脚本的所有者是有效用户。

function checkIfGoogleAccount(emailAddress) {
  try {
    SpreadsheetApp.getActiveSpreadsheet().addViewer(emailAddress) ;
    SpreadsheetApp.getActiveSpreadsheet().removeViewer(emailAddress) ;
    return true ;
  }
  catch(err) {
    return false ;
  }
}

答案 5 :(得分:0)

您可以使用Google API https://dns.google.com/resolve?name=example.com&type=MX

检查身份提供者
    public static class IdentityProviderChecker
    {
        public static async Task<string?> GetProviderName(string email)
        {
            var domainName = email.Split('@').Last();
            using var client = new HttpClient();

            var result = await client.GetAsyncResult<DnsResponse>($"https://dns.google.com/resolve?name={domainName}&type=MX");
            return result.Answer.Any(x => x.Data.Contains("google.com", StringComparison.OrdinalIgnoreCase) || x.Data.Contains("googlemail.com", StringComparison.OrdinalIgnoreCase))
                ? "Google"
                : result.Answer.Any(x => x.Data.Contains("outlook.com", StringComparison.OrdinalIgnoreCase))
                    ? "Microsoft"
                    : null;
        }
    }

    public class DnsResponse
    {
        public Answer[] Answer { get; set; } = null!;
    }

    public class Answer
    {
        public string Data { get; set; } = null!;
    }