在ASP.NET Core MVC 2.2中实现无需外部登录提供程序的登录可以通过以下步骤实现:
创建一个新的ASP.NET Core MVC 2.2项目。
在Startup.cs文件中,将ConfigureServices方法中的身份验证服务配置更改为以下代码:
public void ConfigureServices(IServiceCollection services)
{
// 添加身份验证服务
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = new PathString("/Account/Login");
options.LogoutPath = new PathString("/Account/Logout");
});
// 添加MVC服务
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Configure方法中,将身份验证中间件添加到应用程序的管道中:public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ...
// 使用身份验证中间件
app.UseAuthentication();
// ...
}
AccountController的控制器,并添加以下动作方法:public class AccountController : Controller
{
[HttpGet]
public IActionResult Login(string returnUrl = null)
{
// 如果已经登录,重定向到指定的URL
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Home");
}
ViewData["ReturnUrl"] = returnUrl;
return View();
}
[HttpPost]
public async Task Login(LoginViewModel model, string returnUrl = null)
{
if (ModelState.IsValid)
{
// 在此验证用户名和密码
// 创建用户声明
var claims = new List
{
new Claim(ClaimTypes.Name, model.Username)
};
// 创建用户身份标识
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
// 创建身份验证属性
var authProperties = new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(20)
};
// 进行登录
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);
// 重定向到指定的URL
return RedirectToAction("Index", "Home");
}
// 验证失败,返回登录视图
ViewData["ReturnUrl"] = returnUrl;
return View(model);
}
[HttpPost]
public async Task Logout()
{
// 执行注销
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
// 重定向到登录页面
return RedirectToAction("Login", "Account");
}
}
LoginViewModel的视图模型类,并添加以下属性:public class LoginViewModel
{
[Required]
public string Username { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
Login.cshtml的登录视图,并编写以下代码:@model LoginViewModel
Login
@if (!string.IsNullOrEmpty(ViewData["ReturnUrl"] as string))
{
You must be logged in to access this page.
}
通过以上步骤,您可以在ASP.NET Core MVC 2.2中实现无需外部登录提供程序的登录功能。当用户通过登录视图输入正确的用户名和密码后,系统将创建一个身份验证Cookie,并将用户重定向到主页。在其他需要身份验证的控制器或操作方法中,您可以使用User.Identity.IsAuthenticated属性来检查用户是否已经登录。