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



当我制作一个需要注册和登录的网站时,为了快速完成一些没有太多要求的东西,我将使用带有[授权]属性的会员资格等等。适用于它的作用。但现在我想要更多的东西。基本上,我正在使用 MVC EF CodeFirst 开发一个站点 ASP.NET 并希望创建一个用户实体以保存到包含更多信息的数据库中。注册时所需的此类信息将具有其他属性,例如名字、姓氏、性别、国家/地区等......

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

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

FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false);

这和...

Session["username"] = model.UserName

与其走成员资格提供程序的路线(我个人不喜欢它,并且发现它对于我使用的应用程序来说很重),您是否考虑过简单地为您的应用程序创建自定义 IPrinicipal/IIdentity 对象并使用您想要从"用户"对象中的属性扩展它们?

与其深入了解细节,不如在 SO 上已经有一些很棒的资源涵盖了这个概念: ASP.NET MVC - 设置自定义 IIdentity 或 IPrincipal

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

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

最新更新