ASP.NET Core - 登录和注销

首页 / ASP.Net Core / ASP.NET Core - 登录和注销

在本章中,无涯教程将讨论登录和注销功能,与登录相比,注销非常容易实现,继续进行"Layout"视图,因为要构建具有某些链接的UI,这将允许已登录的用户注销并显示用户名。

<!DOCTYPE html>  
<html> 
   <head> 
      <meta name = "viewport" content = "width=device-width" /> 
       <title>@ViewBag.Title</title> 
   </head> 

   <body> 
      <div> 
         @DateTime.Now 
      </div> 
      
      <div> 
         @RenderBody() 
      </div> 

   </body> 
</html>
  • 对于匿名用户,将显示一个登录链接。

  • 您可以从Razor视图Context中获得构建此UI所需的所有信息。

  • 首先,在布局视图中添加名称空间 System.Security.Claims 。

@using System.Security.Claims 
<!DOCTYPE html>  
<html> 
   
   <head> 
      <meta name = "viewport" content = "width=device-width" /> 
      <title>@ViewBag.Title</title> 
   </head> 

   <body>
      <div> 
         @if (User.IsSignedIn()) { 
            <div>@User.GetUserName()</div> 
            <form method = "post" asp-controller = "Account" aspcontroller = "Logout"> 
               <input type = "submit" value = "Logout"/> 
            </form> 
         } else {  
            <a asp-controller = "Account" asp-action = "Login">Login</a> 
            <a asp-controller = "Account" asp-action = "Register">Register</a> 
         } 
      </div> 
    
      <div> 
         @DateTime.Now 
      </div> 
    
      <div> 
         @RenderBody() 
      </div> 

   </body> 
</html>

现在,转到AccountController并首先执行注销操作,如以下程序所示。

[HttpPost] 
public async Task<IActionResult> Logout() { 
   await _signManager.SignOutAsync(); 
   return RedirectToAction("Index", "Home"); 
} 

现在继续并构建登录功能,在这里,将需要一对动作,一个动作响应一个HttpGet请求并显示可用于登录的表单,另一个动作响应一个HttpPost请求。

首先,将需要一个新的ViewModel来提取登录数据,因为登录与注册非常不同,因此,添加一个新类,并将其命名为 LoginViewModel 。

public class LoginViewModel { 
   public string Username { get; set; }  
   
   [DataType(DataType.Password)] 
   public string Password { get; set; }  
   
   [Display(Name ="Remember Me")] 
   public bool RememberMe { get; set; } 
   public string ReturnUrl { get; set; } 

}

现在让添加登录操作,该操作将响应"Get"请求,如以下程序所示。

[HttpGet] 
public IActionResult Login(string returnUrl = "") { 
   var model = new LoginViewModel { ReturnUrl = returnUrl }; 
   return View(model); 
}
  • 将 returnUrl 作为查询字符串中的参数。

  • returnUrl 可能并不总是存在。将一个空字符串作为默认值。

现在,通过在View→Account文件夹中添加新的MVC视图页面,将拥有一个新视图。

Log in Log Out Add New Item

在中间窗格中,选择" MVC视图页"并将其命名为Login.cshtml,然后单击"Add"按钮。让无涯教程在Login.cshtml文件中添加以下代码。

链接:https://www.learnfk.comhttps://www.learnfk.com/asp.net_core/asp.net-core-log-in-and-log-out.html

来源:LearnFk无涯教程网

@model LoginViewModel 
@{ 
   ViewBag.Title = "Login"; 
}  
<h2>Login</h2>  

<form method = "post" asp-controller = "Account" asp-action = "Login" 
   asp-route-returnurl = "@Model.ReturnUrl"> 
      <div asp-validation-summary = "ValidationSummary.ModelOnly"></div> 
      
      <div> 
         <label asp-for = "Username"></label> 
         <input asp-for = "Username" /> 
         <span asp-validation-for = "Username"></span> 
      </div> 
      
      <div> 
         <label asp-for = "Password"></label> 
         <input asp-for = "Password" />
         <span asp-validation-for = "Password"></span> 
      </div> 
    
      <div> 
         <label asp-for = "RememberMe"></label> 
         <input asp-for = "RememberMe" /> 
         <span asp-validation-for = "RememberMe"></span> 
      </div> 
   <input type = "submit" value = "Login" /> 
</form>        

AccountController ,并实施Post操作,此操作响应HttpPost,这将是一个Async方法,因为将需要调用Identity框架并返回一个任务或IActionResult。

[HttpPost] 
public async Task<IActionResult> Login(LoginViewModel model) { 
   if (ModelState.IsValid) { 
      var result = await _signManager.PasswordSignInAsync(model.Username,
         model.Password, model.RememberMe,false); 
      
      if (result.Succeeded) { 
         if (!string.IsNullOrEmpty(model.ReturnUrl) && Url.IsLocalUrl(model.ReturnUrl)) {
            return Redirect(model.ReturnUrl);
         } else { 
            return RedirectToAction("Index", "Home"); 
         } 
      } 
   } 
   ModelState.AddModelError("","Invalid login attempt"); 
   return View(model); 
}

现在保存所有内容并运行该应用程序。

Login Register

现在,具有登录和注册链接。单击"Login"链接。

Login Register Link

通过指定用户名和密码登录到上一章节中创建的用户,然后选中记住复选框。

无涯教程网

当您单击"Login"按钮时,浏览器将询问您是否要保存本地主机的密码,单击"OK"按钮。

Logout

现在,通过单击注销按钮注销。

Logout Button

作为匿名用户,开始尝试编辑员工详细信息。

Anonymous User

现在您可以看到已重定向到登录视图。使用您的用户名和密码登录,然后选中"Remember Me"复选框。

Check Remember Me

现在,单击"Login"按钮。

Login Button

现在您可以看到已定向到要编辑的URL。这是因为无涯教程适当地处理了返回URL。

这一章《ASP.NET Core - 登录和注销》你学到了什么?在下面做个笔记吧!做站不易,你的分享是对我们最大的支持

好记忆不如烂笔头。留下你的足迹吧 :)

相关文章

Service Mesh实践指南 -〔周晶 - 〕

持续交付36讲 -〔王潇俊 - 〕

架构实战案例解析 -〔王庆友 - 〕

重学线性代数 -〔朱维刚 - 〕

如何从 Azure 上托管的应用服务获取登录用户名?

ASP.NET Web 应用程序 (.NET Framework) 与 ASP.NET Core Web 应...

禁用 MSBuild TypeScript 编译

RestSharp 获取请求的完整 URL

IIS 配置错误 - 此配置部分不能用于此路径

错误请求 - 无效的主机名 ASP.net Visual Studio 2015

视频推荐〔ASP.Net Core - part4-38:exceptionfilter异常筛选器〕

更多 Asp.net-core-log-in-and-log-out 视频教程 »