我正在创建一个新的Web应用程序,该应用程序将使用MVC 5和Entity Framework Database First方法编写。我还想使用ASP.Net Identity来管理成员资格,身份验证,授权等。
我已经在网上阅读了很多有关ASP.Net身份及其工作方式的知识,但是,我仍在学习该主题。
当我在Visual Studio 2013中创建我的MVC 5应用程序并查看帐户控制器时,我的第一个直觉是我不喜欢看到的内容,即引用了名为' ApplicationDbContext '的DbContext。我不喜欢这样的原因是因为我更喜欢将DbContext保留在解决方案中的适当项目中,即,在我的模型层中,该层坚持关注点分离逻辑。
此外,开箱即用的MVC 5项目使用Entity Framework Code First创建默认数据库和表来存储用户,角色等。
因为我必须将现有数据库与现有User表一起使用,所以这种方法不适合我的需求。
我仍然希望对应用程序使用最新的ASP.Net Identity,因为它看起来有很多好处,因此,我发现本文剥离了很多Entity Framework代码,但仍将OWIN支持的身份验证添加到ASP.NET MVC中。
http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux
使用上面的教程,这是我的帐户控制器的HttpPost登录方法
[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
//Calling my own custom Account Service which validates users login details
var user = _AccountService.VerifyPassword(model.UserName, model.Password, false);
if (user)
{
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
//ToDo: Manually adding Role, but will pull from db later
identity.AddClaim(new Claim(ClaimTypes.Role, "guest"));
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = model.RememberMe
}, identity);
return RedirectToAction("Index", "MyDashboard");
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
return View(model);
}
在我以前的MVC应用程序中,我通常会滚动自己的自定义成员身份,当用户登录站点并通过身份验证时,我会将所有其他用户详细信息(例如userID,DOB等)存储在FormsAuthenticationTicket的UserData字符串中。
由于上面的代码未使用FormsAuthentication,而是使用了OWIN CookieAuthentication,因此我不确定如何存储此其他用户数据。
因此,我对遇到的问题有一些疑问。
如何存储用户ID或我在FormsAuthentication中使用的其他任何其他用户数据(DOB等)部分?是否通过向身份添加声明来完成?
考虑到我将Entity Framework Database First与现有数据库一起使用,上述使用ASP.Net Identity / OWIN的方法是否正确?
我是否应该使用帐户控制器中使用的即用型代码,即UserManager,ApplicationUser,ApplicationDbContext等,并将其与我现有的数据库配合使用?
如果我的问题令人困惑,我深表歉意,我想我只是不确定在尝试在最新项目中使用ASP.Net Identity时应该使用哪种方法。
任何反馈将不胜感激。
谢谢。
1)新的Katana Cookie中间件支持声明。这比表单身份验证Cookie更好。声明对任何键/值对建模,并且可以将其存储在身份验证cookie中。有关更多详细信息,请参见此帖子:
2&3)至于身份数据的存储,如果需要使用现有表,则可能无法使用Microsoft EF提供的类。取而代之的是,您将独自实现IUserStore和应用程序需要的所有其他商店接口。我不确定是否应该更改您已经用于存储用户数据的内容。
请记住,OWIN / Katana部分与身份存储区分开。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句