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

标签 c# asp.net webforms

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

我正在使用带有自定义 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/

相关文章:

c# - 带有动态 where 子句的参数化查询

c# - 生成密码重置 token 时出现身份 IUserEmailStore 错误

c# - 如何解决 System.StackOverflowException : 'Exception of type ' System. StackOverflowException' 被抛出。生成随机代码时出现异常?

c# - asp.net web 表单应用程序中的确认框

c# - 绑定(bind)属性中 WPF 文本的快捷方式

c# - 如何在 C# 中创建键/值对数组?

c# - 为什么在按下鼠标按钮时我没有收到任何 MouseMove 事件?

c# - 检查电子邮件地址是否存在

c# - Parameter.addwithvalue - ExecuteReader : CommandText property has not been initialized

asp.net - 在长时间运行的请求期间检测asp.net应用程序何时关闭