协助表单身份验证和自定义角色

时间:2014-06-05 17:25:48

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

我正在使用asp.net网站,我在使用表单身份验证实现自定义角色提供程序时遇到问题。

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

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

到目前为止我做了什么:

在web.config中:

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

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

  • RoleProvider --GetRolesForUser --IsUserInRole --ApplicationName
  • 的MembershipProvider --GetUser --UpdateUser --ValidateUser
  • 的MembershipUser

在我的登录按钮中:

  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()或角色。
  5. 当我检查我的User.Identity时,isAuthenticated = false并且Name =“”。

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

    所以我的问题是:

    1. 我是否需要完成所有这些工作才能将我的角色保存在我创建的SQL Server表中?

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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