MVC 5和ASP.NET标识-实现混乱

我正在创建一个新的Web应用程序,该应用程序将使用MVC 5Entity 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等)存储在FormsAuthenticationTicketUserData字符串中

由于上面的代码未使用FormsAuthentication,而是使用了OWIN CookieAuthentication,因此我不确定如何存储此其他用户数据。

因此,我对遇到的问题有一些疑问。

  1. 如何存储用户ID或我在FormsAuthentication中使用的其他任何其他用户数据(DOB等)部分?是否通过向身份添加声明来完成?

  2. 考虑到我将Entity Framework Database First与现有数据库一起使用,上述使用ASP.Net Identity / OWIN的方法是否正确?

  3. 我是否应该使用帐户控制器中使用的即用型代码,即UserManager,ApplicationUser,ApplicationDbContext等,并将其与我现有的数据库配合使用?

如果我的问题令人困惑,我深表歉意,我想我只是不确定在尝试在最新项目中使用ASP.Net Identity时应该使用哪种方法。

任何反馈将不胜感激。

谢谢。

布罗克·艾伦

1)新的Katana Cookie中间件支持声明。这比表单身份验证Cookie更好。声明对任何键/值对建模,并且可以将其存储在身份验证cookie中。有关更多详细信息,请参见此帖子:

http://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net-developer/

2&3)至于身份数据的存储,如果需要使用现有表,则可能无法使用Microsoft EF提供的类。取而代之的是,您将独自实现IUserStore和应用程序需要的所有其他商店接口。我不确定是否应该更改您已经用于存储用户数据的内容。

请记住,OWIN / Katana部分与身份存储区分开。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC 5标识中的空引用

来自分类Dev

ASP.NET 5和MVC的目的

来自分类Dev

如何为asp.net MVC 5实现ViewModels?

来自分类Dev

在asp.net mvc 5中实现存储库

来自分类Dev

如何为asp.net MVC 5实现ViewModels?

来自分类Dev

ASP.NET MVC5身份实现

来自分类Dev

具有ASP.NET标识的MVC 5-用户登录时获取声明

来自分类Dev

ASP .NET 4.7 MVC 身份验证和授权标识

来自分类Dev

ASP.NET标识默认的ApplicationUserManager是否实现IUserEmailStore?

来自分类Dev

ASP.NET标识默认的ApplicationUserManager是否实现IUserEmailStore?

来自分类Dev

ASP.NET MVC身份默认实现

来自分类Dev

ASP.NET MVC 5中的DateCreated和DateModified

来自分类Dev

ASP.NET MVC 5身份和Azure

来自分类Dev

ASP.NET MVC 5和Bootstrap 3

来自分类Dev

上传和查看文件ASP.NET MVC 5

来自分类Dev

上传和查看文件ASP.NET MVC 5

来自分类Dev

继承的类和剃刀 asp.net mvc 5

来自分类Dev

ASP .NET MVC 5 根据角色和/或状态编辑表单

来自分类Dev

如何为asp.net mvc和asp.net web.api设计和开发通用的asp.net标识

来自分类Dev

ASP.Net MVC 6 PartialView模型绑定混乱

来自分类Dev

在ASP.NET MVC中实现类似ListView的实现

来自分类Dev

使用ASP.Net 5和ASP.NET MVC 6的JwtBearerAuthentication

来自分类Dev

在Asp.Net MVC 5中实现多个数据库的最佳实践是什么?

来自分类Dev

在ASP.NET MVC 5中实现一对多关系

来自分类Dev

ASP.NET MVC 标识。无法向具有特殊字符的用户添加角色

来自分类Dev

在ASP.NET MVC中实现存储库模式和unitOfWork的最佳实践

来自分类Dev

与ASP.NET Core和MVC6(核心)实现统一

来自分类Dev

在ASP.NET 5 / MVC 6中区分MVC和WebAPI

来自分类Dev

在ASP.NET 5 / MVC 6中区分MVC和WebAPI

Related 相关文章

热门标签

归档