篇(11)-Asp.Net Core入门实战-用户登录,记录Cookie,使用Session
入门实战-用户登录,记录Cookie,使用Session
用户登录功能是做项目开发的必备功能,各个业务点中都要读取和使用用户信息,所以用户登录,并记录用户信息可以使用Cookie,Session等功能。
(1).先在Home视图内建立一个Login.cshtml的登录文件,代码如下
(2).然后是Action的编写;还是2个action,一个HttpGet,一个HttpPost;
(3).在HttpPost类型的Action Login内,要进行密码的验证和缓存数据;我贴出代码,注意看关键行注释说明;
[HttpPost] public IActionResult Login(string userName,string passWord) { string uName = userName; string uPass = passWord;//此处可以对密码进行加密处理 //以用户名,密码为条件,从数据库获取用户对象; //if(User!=null){则将用户对象使用Cookie/Session缓存} //代码假定用户名=admin 密码=123456 if (uName=="admin" && uPass=="123456") { //1.最简单的Cookie用法(不安全的): CookieOptions options = new CookieOptions(); options.Expires = DateTime.Now.AddMinutes(10);//10分钟后过期 Response.Cookies.Append("cookie_UserName", uName, options);//设置用 Response.Cookies.Append("cookie_UserPass", uPass, options);//设置密码 string _userName = Request.Cookies["cookie_UserName"];//读取cookie用户名 string _userPass = Request.Cookies["cookie_UserPass"];//读取cookie密码 ViewData["_userName"] = _userName; ViewData["_UserPass"] = _userPass; //2.使用基于Claim的 Cookie加密认证 //使用前,可以在Startup.cs中配置Cookie信息 var claims = new[] { new Claim(ClaimTypes.Name,uName), new Claim("UserPass",uPass) //还可以添加登录时间,ip等信息 }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); ClaimsPrincipal user = new ClaimsPrincipal(claimsIdentity); HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user, new AuthenticationProperties() { IsPersistent = true, ExpiresUtc = DateTimeOffset.Now.AddMinutes(20) } ); return RedirectToAction("Index", "Home");//不同Controller的跳转写法 //return Redirect("Privacy");//同一个Controller下的写法 } else { return RedirectToAction("Error", "Home"); } }
(4).在Index的action内,要进行一个判读读取;
(5).在Index.cshtml中进行用户信息的读取显示,但是发现,读取Claims的信息时,没有成功,虽然在Login的Action内,做了设置,但还没有在startup.cs中配置Cookie信息;
(6).在Startup.cs文件中,配置Cookie,这样就可以读取到Claims的信息;
(7).在导航中做个判断,用户登录,显示【用户名】和退出,否则显示【登录】
(8).在HomeController中等登录Login Action下增加一个Logout,用来实现退出功能
(8).Session的简单实用实例,先在Startup.cs中配置一下session的有效期;在startup.cs的Configure方法中,增加app.UseSession();
(9).还是在Login的Action中,增加一段Session设置和读取的代码
(10).最后可以检验一下2分钟后,退出时,看看还不能获取到session值。
(11).在导航菜单上再加上验证,比如在点击上传文件时,如果用户没登录,则直接跳转到登录页(默认跳转已经在startup.cs的cookie设置中配好了url)。首先还是需要在startup.cs中添加引用,然后在上传文件的Action上增加[Authorize]声明,这样在点击导航[上传文件]时,直接就跳转到了登录页面。照此操作,你可以将要验证的Action或者整个类都声明上均可。
相关文章
- 成为核心程序员的一些建议
- 「程序员」还是「代码生成器」?
- Steam 增加了对 Mesa 着色器单文件缓存的支持
- 程序员为什么不能只学好“专业英语”?
- CEO应向软件工程师学习的7个技能
- 一个 IT 青年北漂四年的感悟
- 这些提高你代码性能的技巧你值得拥有
- 分享让人折服的优秀代码基因
- 2021年拥抱五个软件开发趋势
- 编写高质量的代码,从命名入手
- 一文带你了解得物推荐系统是如何做排序的。网友:真牛
- 中国IT公司欣起一场美女程序员鼓励师招聘潮
- 国外程序员常去的14个顶级开发社区
- 5种类型的程序员 你是哪一款?
- 悼念程序员的那些难忘时刻 漫画组图
- 可能对递归理解的还不够!还差得远!
- 如何成为一个伟大的前端工程师
- 如何一步一步设计一个大规模复杂的系统
- 深入分析EF Core事务提交,分布式事务
- 不要以 DRY 之名,发明低代码 DSL 去残害你的同事