1、先使用UserManager.RemovePassword(UserID),清空密码,再使用UserMnager.AddPassword(UserId,newPassword)增加新密码。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangePassword(ChangePasswordViewModel userViewModel)
{
var userId = User.Identity.GetUserId();
var _user = UserManager.FindById(userId);
if (ModelState.IsValid)
{
if (UserManager.CheckPassword(_user, userViewModel.OldPassword))      //UserManager.CheckPasswrod检查 密码是否正确。
{
UserManager.RemovePassword(userId);      //清空旧密码。
UserManager.AddPassword(userId, userViewModel.NewPassword);      //加入新密码.
return RedirectToAction("Index");
}
else
{
ModelState.AddModelError("", "输入的旧密码不正确");
return View(userViewModel);
}
}
else
{
ModelState.AddModelError("", "绑定失败");
return View(userViewModel);
}
}

2、利用UserManager.GerneratePasswordResetTokeno为用户创建一个重置密码的GUID值,然后调用 ResetPassword(UserId,GUID,newPassword)值重新创建密码;

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangeUserPassword(ResetPasswordViewModel _resetPasswordViewModel)
{
if (!ModelState.IsValid)
{
return View(_resetPasswordViewModel);
}

var _user = UserManager.FindByName(_resetPasswordViewModel.UserName);
if (_user == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

var code =UserManager.GeneratePasswordResetToken(_user.Id);       //为用户创建一个重置密码的GUID值
var result =UserManager.ResetPassword(_user.Id,code,_resetPasswordViewModel.Password);       //重新创建密码;
if (result.Succeeded)  
{
return RedirectToAction("Index");

}
return View();

}

3、直接使用 UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword) 方法验证旧密码和更改新密码。执行后的Identity Result 结果将由模型绑定的状态返回给视图。比如当前密码错误,密码的复杂度达不到要求等。

public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
if (result.Succeeded)
{
return RedirectToAction("Index","Home");
}

AddErrors(result);   
return View(model);
}

Identity 更改密码的几种方式的更多相关文章

  1. Android中EditText显示明文与密码的两种方式

    效果图如下所述: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  2. mysql 修改密码的几种方式

    第一种方式: 最简单的方法就是借助第三方工具Navicat for MySQL来修改,方法如下: 1.登录mysql到指定库,如:登录到test库. 2.然后点击上方“用户”按钮. 3.选择要更改的用 ...

  3. Linux 命令行生成密码的 10 种方式

    内容来自: 10 Ways to Generate a Random Password from the Linux Command Line Linux 好玩的事儿是达成一件事情可以用上百种方式. ...

  4. Linux下修改Mysql密码的三种方式

    前言 有时我们会忘记Mysql的密码,或者想改一个密码,以下将对这两种情况修改密码的三种解决方法做个总结 本文都以用户为 root 为例 一.拥有原来的myql的root的密码 方法一: 在mysql ...

  5. PHP处理密码的几种方式【转载】

    转自:http://www.3lian.com/edu/2015/08-01/235322.html 在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行 ...

  6. PHP处理密码的几种方式

    在 PHP中,经常会对用户身份进行认证.本文意在讨论对密码的处理,也就是对密码的加密处理. 1.MD5 相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这 ...

  7. 【转】MySQLroot用户忘记密码解决方案(安全模式,修改密码的三种方式)

    文章出自:http://www.2cto.com/database/201412/358128.html 1.关闭正在运行的MySQL2.启动MySQL的安全模式,命令如下: ? 1 mysqld - ...

  8. Spring boot 更改端口的几种方式

    web服务的默认端口是8080,但有时候我们需要更改成其他端口,这里有几种端口修改方式: 在application.properties文件添加配置(最简单) server.port= 在applic ...

  9. MySQL5.7修改登录密码的几种方式

    1.更新mysql.user表 use mysql UPDATE user SET authentication_string = password('新密码') where user = 'root ...

随机推荐

  1. C#.net获取存储过程的Return返回值和Output输出参数值

    原文发布时间为:2008-10-25 -- 来源于本人的百度文章 [由搬家工具导入] 1.获取Return返回值 程序代码//存储过程//Create PROCEDURE MYSQL//     @a ...

  2. iOS 如何查看崩溃日志

    参考网址: [转载]https://www.jianshu.com/p/4de55d73c82b [转载]https://blog.csdn.net/qq_26544491/article/detai ...

  3. Segments--poj3304(判断直线与线段之间的关系)

    http://poj.org/problem?id=3304 给你几条线段  然后 让你找到一条直线让他在这条直线上的映射有一个重合点 如果有这条直线的话  这个重合的部分的两个端点一定是某两条线段的 ...

  4. P2384 最短路 洛谷

    https://www.luogu.org/problem/show?pid=2384 题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会 ...

  5. springboot 第一个程序

    idea --> new project --> 选择Spirng Initializr --> next 傻瓜式操作  --> 添加web依赖 项目基本结构: 创建contr ...

  6. JAVA实验--统计文章中单词的个数并排序

    分析: 1)要统计单词的个数,就自己的对文章中单词出现的判断的理解来说是:当出现一个非字母的字符的时候,对前面的一部分字符串归结为单词 2)对于最后要判断字母出现的个数这个问题,我认为应该是要用到ma ...

  7. windows 平台使用wireshark命令行抓包

    Windows网络流量大,或则需要长时间抓包时,wireshark图形界面使用起来比较麻烦 wireshark 内置 dumpcap命令 Capture interface:  -i <inte ...

  8. Google C++ style guide——C++类

    1.构造函数的职责 构造函数中仅仅进行那些没有实际意义的初始化.由于成员变量的"有意义"的值大多不在构造函数中确定. 能够的话,使用Init()方法集中初始化为有意义的数据. 长处 ...

  9. SeaGlass:手工搭建伪基站监控系统

    “伪基站”即假基站,设备一般由主机和笔记本电脑或手机组成,通过短信群发器.短信发信机等相关设备能够搜取以其为中心.一定半径范围内的手机卡信息,利用2G移动通信的缺陷,通过伪装成运营商的基站,冒用他人手 ...

  10. java 返回json数据

    Student st1 = new Student(1, "dg", 18, new Date());            Student st2 = new Student(2 ...