需要帮助从谷歌身份验证获取电子邮件



我有一个 asp.net 的C# Web应用程序。 我创建的此应用使用 AD 身份验证,只能在组织网络中访问。 由于整个 COVID 的事情,我需要将其移动到云服务中,以便用户可以访问。 我的计划是从AD迁移到谷歌,因为该组织利用谷歌服务。 我能够按照此处的说明合并谷歌登录。 但它没有收到电子邮件,我需要登录用户的电子邮件用作多个 sql 查询的参数。显然在 2019 年,谷歌将此信息的访问权限转移到了他们的"人"范围??我能找到的所有示例都是针对 asp.net MVC 和 CORE! 我只是使用常规 ASP.net!!!! 任何建议非常感谢!!

我找到了一个相对简单的答案。 使用Google中设置的示例从前端调用javascript,您可以调用getBasicProfile((。 从这里您可以获取电子邮件以及其他信息。 我们可以将值设置为隐藏字段。 从那里我们可以在后端访问它并做任何事情。

<div class="g-signin2" data-onsuccess="onSignIn" runat="server"  data-theme="dark"></div>

<asp:Button ID="btnProceed" CssClass="btn btn-primary" Enabled="false" runat="server" OnClick="Button1_Click" Text="Proceed" />

<script type="text/javascript">
function onSignIn(googleUser) {
document.getElementById("con").style.display = 'block';  
// Useful data for your client-side scripts:
var profile = googleUser.getBasicProfile();
console.log("ID: " + profile.getId()); 
console.log('Full Name: ' + profile.getName());
console.log('Given Name: ' + profile.getGivenName());
console.log('Family Name: ' + profile.getFamilyName());
console.log("Image URL: " + profile.getImageUrl());
console.log("Email: " + profile.getEmail());
// The ID token you can pass to your backend:
var id_token = googleUser.getAuthResponse().id_token;
console.log("ID Token: " + id_token);
document.getElementById('<%=hEmail.ClientID%>').value = profile.getEmail();  //HiddenField Controls
document.getElementById('<%=hName.ClientID%>').value = profile.getName(); //HiddenField Controls
document.getElementById('<%=Gtoken.ClientID%>').value = id_token; //HiddenField Controls
}
</script>

<asp:HiddenField ID="hEmail" runat="server" />
<asp:HiddenField ID="hName" runat="server" />
<asp:HiddenField ID="Gtoken" runat="server" />

服务器后端

protected void Button1_Click(object sender, EventArgs e)
{
var hidEm = hEmail.Value;
var hidName = hName.Value;
Session["email"] = hidEm;
Session["fName"] = hidName;
}

最新更新