如何在MVC项目中实现ASP.Net Membership?

6

我是ASP.NET Membership的新手,想在ASP.NET MVC项目中实现ASP.NET Membership,但不确定是否可行。

每当我们创建MVC应用程序时,都会发现更改身份验证的选项(无身份验证、身份验证、组织等)。 我选择了身份验证并在我的应用程序中获取了这些表格。 请参见附图。

enter image description here

但我不想使用ASP.NET Identity表和功能。

我想要ASP.NET Membership表和功能(用户CRUD操作、分配角色、更改用户密码等)请参见附图

enter image description here

我已经找到了在SQL Server中创建ASP.NET Membership表的方法。

  1. 转到目录C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319单击
  2. aspnet_regsql.exe。 您将看到以下屏幕。

但是,您是否记得,每当我们使用标识创建MVC应用程序时,它们会内置注册和登录功能(无需编写代码)。 是的,我也想在ASP.NET Membership中拥有这些功能。

感谢您的回答! :)

提前致谢 :)


我认为如果不自己编写AccountController类是不可行的。 - jorel
3个回答

2
如果您真的想使用ASP.NET成员身份验证,最简单的方法是使用ASP.NET内置功能,因为您可以将旧版ASP:NET作为ASP.NET MVC应用程序的一部分使用。
另一种方法是自己编写这些管理页面。这意味着编写控制器和视图。使用这种方法会有更多的陷阱。
交易陷阱: 如果您想将注册与数据库的另一个读/写操作结合起来,您可能希望使用事务来保持数据库的一致性。但是,您不能将ASP.NET成员身份验证函数与另一个代码(ADO.NET、Linq-2-SQL或Entity Framework)组合使用,因为数据库事务需要在一个数据库连接中进行处理。内置的ASP.NET成员身份验证函数使用由web.config文件中的连接字符串提供的自定义连接。因此,事务在两个连接(ASP.NET成员身份验证连接和您的连接)上执行,并且除非您为服务器配置了分布式事务,否则它不起作用。这不是所有托管提供商都支持的。
最后,我通过从头开始重写成员身份验证提供程序并调用ASP.NET成员身份验证过程来解决了这个问题。这解决了两个连接和分布式事务的问题。
实体框架陷阱: 您可能会在应用程序中使用实体框架。您可能需要在一些业务层中请求成员资格。EntityFramework不支持IDBConnection或DBConnection,但您需要提供EntityConnection。这意味着Entity Framework使用不同类型的连接而不是ADO.NET。从实体框架调用ASP.NET成员资格存储过程不会为您提供返回代码。我通过为每个ASP.NET成员资格存储过程创建SQL服务器包装器解决了这个问题。
因此,将ASP.NET成员资格集成到现代ASP.NET MVC应用程序中与Entity Framework真的需要很多工作。对于新项目,我不会这样做。对于新项目,请尝试使用OWIN

你好qub1n,感谢你的回答。真的不可能自动生成控制器和视图来管理ASP.NET成员资格表在新/现有的MVC应用程序中吗? - Jatin Gadhiya
如果可能的话,我不知道如何做到。但是我想告诉你,即使你成功了,这只是问题的开始。 - Tomas Kubes
嗨,我有一个类似的问题,我有一个基于asp.net成员资格和另一个基于OWIN的现有项目。我的要求是在第一个系统中登录,并在重定向到其他系统时,用户不必再次登录,有可能以某种方式实现吗? aspnet成员资格表中的数据已迁移到新的AspNet表,但不确定从何处开始并重写代码以创建类似共享“cookie”或共享“会话”的功能来提供该功能。 - Rey
检查Tomas在OWIN上发布的链接。这是我最近从微软看到的最清晰和实用的解释之一。谢谢Tomas。 - DB Conner

2
我是ASP.NET Membership的新手。
ASP.Net Membership已经超过10年了。微软已经不再支持它了。这是历史记录:
1. ASP.Net Membership Provider(您提到的) 2. ASP.NET Universal Providers 3. Simple Membership Provider 4. ASP.NET Identity(当前版本为2)
微软正在向ASP.Net Identity转移。这就是为什么您找不到任何有关MVC和旧Membership的文章。
既然您也是ASP.Net Membership的新手,我个人建议您学习ASP.Net Identity。以下是免费课程和书籍:
ASP.NET MVC 5 Fundamentals by Scott Allen
ASP.NET identity from Adam Freeman's book
如何在MVC项目中实现ASP.Net Membership?
您可以使用ASP.Net Identity生成的AccountController,并自己替换UserManager为Membership。

你好Win...我说我是asp.net会员制的新手,但不是身份验证。我非常了解身份验证的工作原理。但我想在一些自定义项目中使用asp.net会员制。所以请问您如何在不写一行代码的情况下实现这个功能。 - Jatin Gadhiya

0

步骤

1.在.C:\Windows\Microsoft.NET\Framework64\v4.0.30319中注册数据库aspnet_regsql

2.在web.config中添加成员默认提供程序

3.创建注册和登录模型及其对应的视图

4.AccountController

使用Membership.CreateUser(string username, string password, string email)创建新用户。

使用Membership.validateUser(string username, string password)验证输入的凭据。

5.成功登录后创建身份验证Cookie
创建票据-》使用FormsAuthenticationTicket()
加密票据
创建新Cookie
将此Cookie添加到Response.Cookies中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接