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