gpt4 book ai didi

asp.net - 将 ASP.NET MVC5 身份验证添加到现有项目

转载 作者:行者123 更新时间:2023-12-03 04:21:00 25 4
gpt4 key购买 nike

我在网络上看到过很多类似的页面,但大多数都使用新项目而不是现有项目,或者没有必要的功能。因此,我有一个现有的 MVC 5 项目,并且希望将 ASP.NET MVC5 Identity 与登录、电子邮件确认和密码重置功能集成。

此外,我还需要在数据库上创建所有必要的表,即用户、角色、组等(我在项目中使用了 EF Code-First)。有没有对应这些需求的文章或示例?

最佳答案

为现有项目配置身份并不难。您必须安装一些 NuGet 包并进行一些小配置。

首先使用包管理器控制台安装这些 NuGet 包:

PM> Install-Package Microsoft.AspNet.Identity.Owin 
PM> Install-Package Microsoft.AspNet.Identity.EntityFramework
PM> Install-Package Microsoft.Owin.Host.SystemWeb

添加用户类别并使用 IdentityUser继承:

public class AppUser : IdentityUser
{
//add your custom properties which have not included in IdentityUser before
public string MyExtraProperty { get; set; }
}

对角色做同样的事情:

public class AppRole : IdentityRole
{
public AppRole() : base() { }
public AppRole(string name) : base(name) { }
// extra properties here
}

更改您的 DbContext来自 DbContext 的父级至IdentityDbContext<AppUser>像这样:

public class MyDbContext : IdentityDbContext<AppUser>
{
// Other part of codes still same
// You don't need to add AppUser and AppRole
// since automatically added by inheriting form IdentityDbContext<AppUser>
}

如果您使用相同的连接字符串并启用迁移,EF 将为您创建必要的表。

您可以选择扩展 UserManager添加您所需的配置和自定义:

public class AppUserManager : UserManager<AppUser>
{
public AppUserManager(IUserStore<AppUser> store)
: base(store)
{
}

// this method is called by Owin therefore this is the best place to configure your User Manager
public static AppUserManager Create(
IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
{
var manager = new AppUserManager(
new UserStore<AppUser>(context.Get<MyDbContext>()));

// optionally configure your manager
// ...

return manager;
}
}

由于身份基于 OWIN,因此您也需要配置 OWIN:

添加一个类到App_Start文件夹(或任何其他地方,如果你想要的话)。该类由 OWIN 使用。这将是您的入门类(class)。

namespace MyAppNamespace
{
public class IdentityConfig
{
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(() => new MyDbContext());
app.CreatePerOwinContext<AppUserManager>(AppUserManager.Create);
app.CreatePerOwinContext<RoleManager<AppRole>>((options, context) =>
new RoleManager<AppRole>(
new RoleStore<AppRole>(context.Get<MyDbContext>())));

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Home/Login"),
});
}
}
}

只需将这行代码添加到您的 web.config 中就差不多完成了文件,以便 OWIN 可以找到您的启动类。

<appSettings>
<!-- other setting here -->
<add key="owin:AppStartup" value="MyAppNamespace.IdentityConfig" />
</appSettings>

现在,在整个项目中,您可以使用 Identity,就像 VS 已经安装的任何新项目一样。例如,考虑登录操作

[HttpPost]
public ActionResult Login(LoginViewModel login)
{
if (ModelState.IsValid)
{
var userManager = HttpContext.GetOwinContext().GetUserManager<AppUserManager>();
var authManager = HttpContext.GetOwinContext().Authentication;

AppUser user = userManager.Find(login.UserName, login.Password);
if (user != null)
{
var ident = userManager.CreateIdentity(user,
DefaultAuthenticationTypes.ApplicationCookie);
//use the instance that has been created.
authManager.SignIn(
new AuthenticationProperties { IsPersistent = false }, ident);
return Redirect(login.ReturnUrl ?? Url.Action("Index", "Home"));
}
}
ModelState.AddModelError("", "Invalid username or password");
return View(login);
}

您可以创建角色并添加到您的用户:

public ActionResult CreateRole(string roleName)
{
var roleManager=HttpContext.GetOwinContext().GetUserManager<RoleManager<AppRole>>();

if (!roleManager.RoleExists(roleName))
roleManager.Create(new AppRole(roleName));
// rest of code
}

您还可以向用户添加角色,如下所示:

UserManager.AddToRole(UserManager.FindByName("username").Id, "roleName");

通过使用 Authorize您可以保护您的操作或 Controller :

[Authorize]
public ActionResult MySecretAction() {}

[Authorize(Roles = "Admin")]]
public ActionResult MySecretAction() {}

您还可以安装其他软件包并配置它们以满足您的要求,例如 Microsoft.Owin.Security.Facebook或任何你想要的。

注意:不要忘记向您的文件添加相关的命名空间:

using Microsoft.AspNet.Identity;
using Microsoft.Owin.Security;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Owin;

您还可以查看我的其他答案,例如 thisthis用于身份的高级使用。

关于asp.net - 将 ASP.NET MVC5 身份验证添加到现有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31960433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com