0

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

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

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

到目前为止我做了什么:

在 web.config 中:

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

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

  • RoleProvider --GetRolesForUser --IsUserInRole --ApplicationName
  • MembershipProvider --GetUser --UpdateUser --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 吗?如果是这样,我该怎么做或在哪里做?

4

2 回答 2

0

I created two classes that implement IPrincipal and IIdentity.

In the Principal's IsInRole function I make a call to my custom RoleProvider's IsUserInRole function.

I logged using my custom login page and was redirected to the correct form. The Identity and RolePrincipal both contain the correct information.

于 2014-06-06T12:44:15.637 回答
0

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

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

于 2014-06-05T19:36:17.637 回答