asp网站源码分享加密,aspnet网站开发源码

各位老铁们,大家好,今天由我来为大家分享asp网站源码分享加密,以及aspnet网站开发源码的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

这节我们主要介绍重置密码功能,当一个用户忘记自己密码时需要选择重置密码,使用ASP.NETCoreIdentity进行重置密码是非常方便的

1、ASP.NETCoreIdentity重置密码

接下来我们看一下Identity中是如何重置密码,当一个用户忘记密码时,我们将他带入进入忘记密码页面,如下图所示:

这个页面会向用户指定的邮箱发送一个重置密码的URL,当用户点击这个URL时,会携带上相应的token和Email链接到重置密码页面,下图为重置密码页面:

2、在Identity中启用Token生成功能

在应用程序中添加AddDefaultTokenProviders扩展方法启用token生成功能。下面代码:

builder.Services.AddIdentity<AppUser,IdentityRole>().AddEntityFrameworkStores<AppIdentityDbContext>().AddDefaultTokenProviders();

重置密码时每次发送邮件Identity会生成一个token,当用户点击邮件中的链接地址时,Identity会校验该Token并且确保用户重置密码之前Token是可用的并且没有过期,这是一个很好的特性,我们通过添加下面代码来设置Token的有效时间:

//dotnet6builder.Services.Configure<DataProtectionTokenProviderOptions>(opts=>opts.TokenLifespan=TimeSpan.FromHours(10));

在这我们设置Token的有效时间是10,这意味着用户在10小时内可以修改密码

3、创建一个忘记密码功能

在AccountController中添加一个新的方法叫ForgotPassword。这个方法主要用来给用户指定的邮箱发送邮件,用户可以使用这个链接重置密码。添加另外一个ForgotPasswordConfirmation方法提示用户邮件已经发送成功

[AllowAnonymous]publicIActionResultForgotPassword(){returnView();}[HttpPost][AllowAnonymous]publicasyncTask<IActionResult>ForgotPassword([Required]stringemail){if(!ModelState.IsValid){returnView(email);}varappUser=await_userManager.FindByEmailAsync(email);if(appUser==){returnRedirectToAction(nameof(ForgotPasswordConfirmation));}vartoken=await_userManager.GeneratePasswordResetTokenAsync(appUser);varurl=Url.Action(“ResetPassword”,”Account”,new{Email=email,Token=token},Request.Scheme);_emailService.Send(appUser!.Email??”450190369@qq.com”,”重置密码”,$”{url}”);returnRedirectToAction(“ForgotPasswordConfirmation”);}[AllowAnonymous]publicIActionResultForgotPasswordConfirmation(){returnView();}

下面4行代码比较重要:

varappUser=await_userManager.FindByEmailAsync(email);if(appUser==){returnRedirectToAction(nameof(ForgotPasswordConfirmation));}vartoken=await_userManager.GeneratePasswordResetTokenAsync(appUser);varurl=Url.Action(“ResetPassword”,”Account”,new{Email=email,Token=token},Request.Scheme);_emailService.Send(appUser!.Email??”450190369@qq.com”,”重置密码”,$”{url}”);

我们使用UserManager<T>类的GeneratePasswordResetTok

enAsync方法创建了一个重置密码的token,我们将这个token添加到链接地址中并且将这个链接地址发送给用户,用户使用这个链接来重置密码

在Views->Account中添加如下2个View文件,ForgotPassword.cshtml&ForgotPasswordConfirmation.cshtml,代码如下:

ForgotPassword.cshtml

@{ViewData[“Title”]=”忘记密码”;}<divclass=”container”><formasp-action=”ForgotPassword”method=”post”><divclass=”mb-3rowalign-items-center”><divclass=”col-sm-1″><labelclass=”control-label”>电子邮箱</label></div><divclass=”col-sm-11″><inputname=”email”class=”form-control”/></div></div><divclass=”mb-3rowalign-items-center”><divclass=”col-sm-11offset-sm-1″><buttonclass=”btnbtn-primary”type=”submit”>发送邮件</button></div></div></form></div>

ForgotPasswordConfirmation.cshtml

@{ViewData[“Title”]=”忘记密码确认”;}<h1>忘记密码确认</h1><p>邮件已经发送,请检查邮件并重置密码</p>

4、测试忘记密码功能

运行应用程序进入忘记密码URL并且输入邮件地址,点击发送邮件。下图:

发送完邮件之后会跳转到如下页面:

下面我们打开邮箱查看一下刚才发的邮件:

5、修改密码当打开这个链接时,这个链接将用户重定向AccountController的ResetPassword方法,因此我们需要添加ResetPassword方法和ResetPasswordConfirmation方法(修改完密码之后跳转的页面),代码如下:

[AllowAnonymous]publicIActionResultResetPassword(stringtoken,stringemail){varresetPassword=newResetPassword(){Token=token,Email=email};returnView(resetPassword);}[HttpPost][AllowAnonymous]publicasyncTask<IActionResult>ResetPassword(ResetPasswordresetPassword){if(!ModelState.IsValid)returnView(resetPassword);varappUser=await_userManager.FindByEmailAsync(resetPassword.Email);if(appUser==)RedirectToAction(“ResetPasswordConfirmation”);varresetPassResult=await_userManager.ResetPasswordAsync(appUser,resetPassword.Token,resetPassword.Password);if(!resetPassResult.Succeeded){foreach(varerrorinresetPassResult.Errors)ModelState.AddModelError(error.Code,error.Description);returnView();}returnRedirectToAction(“ResetPasswordConfirmation”);}

当用户打开邮件中的地址时,将调用Get版本的ResetPassword方法,这个方法主要作用是拿到token和Email并且将这两个参数对应的数据绑定到View。接下来用户输入新密码和确认密码在视图中(i.e.ResetPassword.cshtml)并点击按钮保存。这将调用Post版本的ResetPassword方法,这个方法通过模型绑定来获取新密码和用户邮件以及token。代码如下:下面,我们需要创建一个ResetPassword.cs类在Models文件

publicclassResetPassword{[Required][DisplayName(“密码”)]publicstringPassword{get;set;}=!;[Compare(“Password”,ErrorMessage=”密码和确认密码不匹配”)][DisplayName(“确认密码”)]publicstringConfirmPassword{get;set;}=!;publicstringEmail{get;set;}=!;publicstringToken{get;set;}=!;}

我们在内Views->Account文件夹中创建2个视图ResetPassword&ResetPasswordConfirmation使用如下代码:

ResetPassword.cshtml

@modelResetPassword@{ViewData[“Title”]=”重置密码”;}<divclass=”text-danger”asp-validation-summary=”All”></div><formasp-action=”ResetPassword”method=”post”><divclass=”mb-3rowalign-items-center”><divclass=”col-sm-1″><labelasp-for=”Password”></label></div><divclass=”col-sm-11″><inputasp-for=”Password”class=”form-control”/></div></div><divclass=”mb-3rowalign-items-center”><divclass=”col-sm-1″><labelasp-for=”ConfirmPassword”></label></div><divclass=”col-sm-11″><inputasp-for=”ConfirmPassword”class=”form-control”/></div></div><inputtype=”hidden”asp-for=”Email”class=”form-control”/><inputtype=”hidden”asp-for=”Token”class=”form-control”/><divclass=”mb-3rowalign-items-center”><divclass=”col-sm-11offset-sm-1″><buttonclass=”btnbtn-primary”type=”submit”>提交</button></div></div></form>

ResetPasswordConfirmation.cshtml

@{ViewData[“Title”]=”重置密码确认”;}<h1>重置密码确认</h1><p>密码已经被重置.请<aasp-action=”Login”>登录</a></p>

ResetPassword视图是用户修改密码

ResetPasswordConfirmation视图提示用户密码已经修改成功

6、测试修改密码特性

首先我们进入忘记密码页面,(url–https://localhost:7296/Ac

count/ForgotPassword)输入邮件。点击发送邮件,会向我们指定的邮箱发送电子邮件,将邮箱中收到的url输入到浏览器中。如下图所示:

注意Token和Email添加到了url查询字符串中,这两个值通过ResetPasswordGet版本的方法传递到了View,现在可以修改我们的密码了,修改完之后会跳转到如下页面:

总结

这节我们主要实现了实现忘记密码功能,注册token并且设置token的声明周期,实现重置密码功能

源代码地址:

https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/AspNetCore.Identity/Identity

关于asp网站源码分享加密和aspnet网站开发源码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平