gpt4 book ai didi

c# - 使用电子邮件地址的 Asp.Net 身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 22:15:54 26 4
gpt4 key购买 nike

我使用电子邮件地址作为登录的“用户名”。当用户登录时,创建的用户对象将电子邮件地址作为不正确的名称。实际名称是数据库中的另一个字段。我如何登录并根据电子邮件地址进行身份验证,然后在用户对象中加载正确的名称?

我正在使用带有自定义 MembershipProvider 和 RoleProvider 的表单例份验证。

编辑下方以澄清

我有一个自定义的 MembershipProvider,它通过电子邮件地址和密码验证用户。它由基本登录控件调用并在 web.config 中注册。

<asp:Login ID="AdminLogin" runat="server" MembershipProvider="AdminMembershipProvider">
</asp:Login>

网络配置:

<authentication mode="Forms">
<forms loginUrl="Default.aspx" />
</authentication>
<membership defaultProvider="AdminMembershipProvider">
<providers>
<clear />
<add name="AdminMembershipProvider"
type="AdminMembershipProvider"
connectionStringName="EvalSysConnectionString"
/>

</providers>
</membership>

只有这样,我的用户才能正确登录。但是,它会返回电子邮件地址的 Context.User.Identity.Name。我将名字和姓氏存储在数据库中,并希望这是名字。

我阅读了各种帖子,这些帖子似乎表明我必须创建一个 Global.asax 文件并覆盖 PostAutheticateRequest 方法才能执行此操作。但是我不知道如何继续这个策略。

<%@ Application Language="C#" %>

<script runat="server">

protected void Application_PostAuthenticateRequest()
{
string test = HttpContext.Current.User.ToString();
}

</script>

抱歉,我的问题太含糊了。我对此感到迷茫,以至于我不知道如何写出一个好问题。

最佳答案

我相信您要问的是:我可以更改属性 Context.User.Identity.Name 以显示用户名以外的内容吗?

编辑

不可能使用属性的实现 Context.User.Identity.Name因为它是只读的,并且设置为无法更改的用户名。

快速简便的解决方案

您可以编写一个方法来调用数据库中的存储过程(或代码中的查询)以根据 Context.User.Identity.Name 中的值进行查找并返回 First 和最后的。您可以将结果存储在 Session 变量中或使用 Profile 对象(如下所述)。

替代解决方案

您可以编写自己的 IIdentity 实现。这是我从未做过的事情,所以我没有任何片段可以贡献。然而这link应该给你一个起点。我会小心使用此解决方案,因为您会失去识别用户的独特方式,除非您在 IIdentity 的实现中添加额外的属性并确保在引用时转换 Context.User.Identity,到您自己的实现。

希望对您有所帮助。

关于c# - 使用电子邮件地址的 Asp.Net 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com