gpt4 book ai didi

c# - 具有现有用户表的 ASP.NET MVC 标识

转载 作者:行者123 更新时间:2023-11-30 12:25:52 25 4
gpt4 key购买 nike

我正在创建一个新的 Web 应用程序,它需要根据另一个 Web 应用程序中存在的现有用户表对用户进行身份验证。用户注册、忘记密码等都在该应用程序中处理。在我的新应用程序中,我只需要登录即可。

我想知道是否可以覆盖一些身份类以指向该表来验证用户身份,这样我就可以使用现有的身份功能,如 Controller 上的 [Authorize] 属性并重定向回登录页面等。

最佳答案

在尝试将我的遗留系统升级到 OWIN 身份验证时,我遇到了与您相同的情况,我也有自己的用户表和身份验证工作流,这与 ASP.NET Identity 产品完全不同。

首先,我曾尝试自定义 ASP.NET Identity,但并没有那样解决。我的想法是,由于 Identity 具有很多抽象层次,因此为遗留应用程序定制 Identity 很痛苦,而且要复杂得多。

最终我想出了一个解决方案来剥离 ASP.NET Identity 并自行管理声明身份。这非常简单,我下面的简单演示代码是如何在没有 ASP.NET Identity 的情况下使用 OWIN 登录,希望对您有所帮助:

private void OwinSignIn(User user, bool isPersistence = false)
{
var claims = new[] {
new Claim(ClaimTypes.Name, user.Name),
new Claim(ClaimTypes.Email, user.Email)
};

var identity = new ClaimsIdentity(claims, DefaultApplicationTypes.ApplicationCookie);

var roles = _roleService.GetByUserId(user.Id).ToList();
if (roles.Any())
{
var roleClaims = roles.Select(r => new Claim(ClaimTypes.Role, r.Name));
identity.AddClaims(roleClaims);
}

var context = Request.GetOwinContext();
var authManager = context.Authentication;

authManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistence }, identity);
}

[HttpPost]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
return View();

var user = _userService.GetByEmail(model.Email);
if (user != null && (user.Password == model.Password))
{
OwinSignIn(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}

ModelState.AddModelError("", "Invalid email or password");
return View();
}

关于c# - 具有现有用户表的 ASP.NET MVC 标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30455442/

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