【问题标题】:Need help getting email from google authentication需要帮助从谷歌身份验证获取电子邮件
【发布时间】:2020-08-29 23:40:17
【问题描述】:
我有一个 asp.net C# Web 应用程序。我创建的这个应用程序使用 AD 身份验证,只能在组织网络内访问。由于整个 COVID 问题,我需要将其移动到云服务中,以便用户可以访问。我的计划是从 AD 迁移到 google,因为该组织使用 google 服务。我能够按照here 的说明加入谷歌登录。但它没有收到电子邮件,我需要登录用户的电子邮件作为几个 sql 查询的参数。显然,在 2019 年,谷歌将这些信息的访问权转移到了他们的“人员”范围内??我能找到的所有示例都是针对 asp.net MVC 和 CORE 的!我只是在使用普通的 ASP.net!!!!任何建议都非常感谢!
【问题讨论】:
标签:
c#
asp.net
authentication
oauth-2.0
google-api
【解决方案1】:
我找到了一个相对简单的答案。使用 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;
}