gpt4 book ai didi

asp.net-mvc - 是否可以使用 ASP.NET MVC 创建登录系统但不使用成员资格提供程序?

转载 作者:行者123 更新时间:2023-12-02 01:27:38 25 4
gpt4 key购买 nike

我有一个带有用户表的现有数据库,我们计划将该数据库用于构建在 ASP.NET MVC 中的新系统。但是,我不确定的是我是否能够创建一个不使用内置帐户 Controller 或常规成员(member)提供程序的登录系统,以便我们仍然可以使用现有的表结构。

所以我的问题是,这可能吗?或者甚至特别难做?

什么是最被广泛接受和最简单的做事方式?

最佳答案

我有这个完全相同的要求。我有自己的用户和角色架构,不想迁移到 asp.net 成员架构,但我确实想使用 ASP.NET MVC 操作过滤器来检查授权和角色。我不得不进行大量挖掘才能确切地找出需要完成的工作,但最终还是相对容易的。我会省去你的麻烦,告诉你我做了什么。

1) 我创建了一个派生自 System.Web.Security.MembershipProvider 的类。 MembershipProvider 有大量抽象方法用于各种与身份验证相关的功能,例如忘记密码、更改密码、创建新用户等。我想要的只是能够根据我自己的模式进行身份验证。所以我的类(class)主要包含空覆盖。我只是覆盖了 ValidateUser:

public override bool ValidateUser(string username, string password)
{
if (string.IsNullOrWhiteSpace(username) ||
string.IsNullOrWhiteSpace(password))
return false;

string hash = EncryptPassword(password);
User user = _repository.GetByUserName(username);
if (user == null) return false;

return user.Password == hash;
}

2) 我创建了一个派生自 System.Web.Security.RoleProvider 的类。同样,对于我不需要的所有绒毛,我只有空的实现,比如创建和改变角色。我只是覆盖了两种方法:
public override string[] GetRolesForUser(string username)
{
User user = _repository.GetByUserName(username);
string[] roles = new string[user.Role.Rights.Count + 1];
roles[0] = user.Role.Description;
int idx = 0;
foreach (Right right in user.Role.Rights)
roles[++idx] = right.Description;
return roles;
}

public override bool IsUserInRole(string username, string roleName)
{
User user = _repository.GetByUserName(username);
if(user!=null)
return user.IsInRole(roleName);
else
return false;
}

3)然后我将这两个类插入到我的 web.config 中:
<membership defaultProvider="FirstlookMemberProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="FirstlookMemberProvider" type="FirstlookAdmin.DomainEntities.FirstlookMemberProvider, FirstlookAdmin" />
</providers>
</membership>
<roleManager defaultProvider="FirstlookRoleProvider" enabled="true" cacheRolesInCookie="true">
<providers>
<clear/>
<add name="FirstlookRoleProvider" type="FirstlookAdmin.DomainEntities.FirstlookRoleProvider, FirstlookAdmin" />
</providers>
</roleManager>

就是这样。默认授权操作过滤器将使用这些类。您仍然需要处理登录页面登录和注销。只需像往常一样使用标准表单例份验证类即可。

关于asp.net-mvc - 是否可以使用 ASP.NET MVC 创建登录系统但不使用成员资格提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1438151/

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