【问题标题】:Assistance with Forms Authentication and Custom Roles协助表单身份验证和自定义角色
【发布时间】:2014-07-26 19:35:39
【问题描述】:

我在一个 asp.net 网站上工作,但在使用表单身份验证实现自定义角色提供程序时遇到了麻烦。

我有一个 SQL Server 数据库“MyBase”,其中包含一个“UserRoles”表,其中包含 UserRoleID、EmployeeID、RoleID 和 UserName 字段。当用户使用自定义登录页面(只有几个文本框、标签和一个按钮)登录时,我想从此表中检索用户的角色。

我已经搜索/阅读了几个问题、场景和示例,但我仍然在某个地方遗漏了一些东西,因此我正在寻求帮助。

到目前为止我做了什么:

在 web.config 中:

  • 将身份验证模式设置为表单
  • 设置会员提供商设置
  • 设置角色提供者设置

我创建了以下自定义类并列出了子/函数/属性:

  • 角色提供者 --GetRolesForUser --IsUserInRole --应用程序名称
  • MembershipProvider --获取用户 --更新用户 --ValidateUser
  • 会员用户

在我的登录按钮中:

  1. 我加密了用户的密码。
  2. 调用我的自定义 MembershipProviders 的 ValidateUser MemProv.ValidateUser(txt_username.Text, encrypedPW),它会正确返回 true 或 false。
  3. 致电FormsAuthentication.SetAuthCookie(txt_username.Text, False)
  4. 调用我的自定义 RoleProvider 的 GetRolesForUser 函数:RoleProv.GetRolesForUser(txt_Username.Text),它会正确返回 String() 或角色。

当我检查我的 User.Identity 时,isAuthenticated = false 和 Name = ""。

我很确定我缺少 IIdentity 和/或 IPrincipal 的实现,但我不知道在哪里/如何实现它们。

所以我的问题是:

  1. 我是否需要经历所有这些才能将我的角色保留在我创建的 SQL Server 表中?

  2. 我需要合并 IIDentity 和 IPrincipal 吗?如果是这样,我该怎么做或在哪里做?

【问题讨论】:

    标签: asp.net .net vb.net formsauthentication


    【解决方案1】:

    使用 ASP.Net IIS 注册工具 (Aspnet_regiis.exe) 重新创建 MyBase 数据库。这将创建存储您的会员信息所需的数据库 - 正确。

    这是一个提供更多信息的链接:http://msdn.microsoft.com/en-US/library/k6h9cz8h(v=vs.100).ASPX

    【讨论】:

    • 如果我的 MembershipProvider 和 RoleProvider 正在访问当前表并返回正确的信息,那么重新创建数据库将如何帮助解决身份和主体问题?
    • 我的印象是您从头开始创建该表,抱歉,您确实说“当我检查我的 User.Identity 时,isAuthenticated = false 和 Name = ""。”所以我想知道您的数据库是否有问题。
    • 我已经多次实施 Membership 并且从来不需要处理实施 IPrincipal 或 IIdentity。
    • 如果你需要一个关于实现 IPrincipal 的好教程,这里有很多,这里有一个:codeproject.com/Tips/574576/…
    • “球”似乎被丢弃在设置身份属性的位置。 “MyRoleProvider”和“MyMembershipProvider”并完成他们的部分工作与数据检索,但在某个地方我错过了设置用户信息的地方。感谢您的链接。我一直在研究一些关于如何实现这些接口的教程。我希望我正朝着正确的方向前进。再次感谢
    【解决方案2】:

    我创建了两个实现 IPrincipal 和 IIdentity 的类。

    在 Principal 的 IsInRole 函数中,我调用了自定义 RoleProvider 的 IsUserInRole 函数。

    我使用自定义登录页面登录并被重定向到正确的表单。 Identity 和 RolePrincipal 都包含正确的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-10
      • 2011-12-09
      • 2017-08-26
      • 2011-11-18
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多