c# - 需要帮助从谷歌身份验证获取电子邮件
问题描述
我有一个 asp.net C# web 应用程序。我创建的这个应用程序使用 AD 身份验证,只能在组织网络内访问。由于整个 COVID 问题,我需要将其移动到云服务中,以便用户可以访问。我的计划是从 AD 迁移到 google,因为该组织使用 google 服务。我能够按照此处的说明合并 google 登录。但它没有收到电子邮件,我需要登录用户的电子邮件作为几个 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;
}
推荐阅读
- proxy - 使用 Apache Traffic Server 设置转发代理,将所有请求转发到另一个代理并缓存响应
- php - 如果在codeigniter 3函数上出现问题
- c# - 如何在wpf中将高度自动设置为itemscontrol?
- angular - 通过 devtools 控制台为 Angular 应用程序断开特定选项卡的热重载
- sql - 如何替换 SQL 表中的 NULL 值?
- javascript - 减少 Google Maps Costing,只调用 google maps javascript api
- android - Android 应用链接设置,如何设置应用链接 URL 始终在此应用中打开?
- mysql - 如何在 mysql 中编写对 hasManyThrough 关系的查询?
- android - 嵌套导航图 Android 中是否可以有动态目的地?
- javascript - Javascript 游戏的开始屏幕/可点击的播放按钮