.NET自定义成员资格.自定义登录/注册:身份验证/授权

Sha*_*anc 5 asp.net-mvc session authorization asp.net-membership

当我创建一个需要注册和登录的网站时,对于没有很多要求的快速网站,我将使用[Authorize]属性和诸如此类的属性.适用于它的功能.但现在我想要更多东西.基本上我正在使用ASP.NET MVC EF CodeFirst开发一个站点,并希望创建一个用户实体来持久保存到包含更多信息的数据库.注册时所需的此类信息将具有其他属性,例如FirstName,LastName,Gender,Country等...

我已经尝试过阅读实现自定义MembershipProvider和MembershipUser等...我已经走了这么远,但它不会以我想要的方式结合在一起.现在,当我使用PHP开发网站时,或者在ASP.NET中开发网站时,我只需创建我的User类,并为他提供注册页面所需的所有属性,然后将其推送到数据库.然后,当我登录时,我只需获取用户名或电子邮件和密码,然后创建一个会话变量,指示用户是否已获得授权.

这样可以吗?我只是不明白为什么这整个会员事情比看起来要复杂得多,所以我觉得我错过了这一切.此外,我注意到在ASP.NET MVC Web应用程序中,当您进行身份验证时,它会写出此行....

FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false);
Run Code Online (Sandbox Code Playgroud)

有什么区别和...

Session["username"] = model.UserName
Run Code Online (Sandbox Code Playgroud)

Jes*_*sse 2

您是否考虑简单地为您的应用程序创建一个自定义IPrincipal / IIdentity对象并使用属性扩展它们,而不是走会员资格提供商的路线(我个人不喜欢它,并且发现它对于我使用的应用程序来说太重了)你想要你的“用户”对象吗?

与其深入细节,SO 上已经有一些很棒的资源涵盖了这个概念:ASP.NET MVC - Set custom IIdentity or IPrincipal

关于你的问题,Session["username"]这只是一个会话cookie。您将失去 FormsAuthentication 的所有好处。例如,使用表单身份验证,如果用户请求需要经过身份验证的访问的页面,并且该用户之前未登录过该站点,则用户将被重定向到使用表单身份验证配置的登录页面。

您将Session["username"]需要手动滚动身份验证的各个方面。我强烈建议不要这样做。