我有一个使用asp.net安全性的MVC 5演示应用程序。在该应用程序中,我有75个以上的用户帐户。
发布演示的人员离开了,因此我希望能够重置所有帐户的所有密码,而无需将每个帐户的电子邮件更改为我的个人电子邮件,并在其中单独执行链接将发送到我的个人电子邮件。
有没有办法可以输入用户名和新密码,并使用内置的IdentityUser
功能重置密码?
答案 0 :(得分:1)
假设您的应用程序采用标准MVC5格式,请将此ViewResult放入帐户控制器:
[AllowAnonymous]
public async Task<ViewResult> ResetAllPasswords()
{
// Get a list of all Users
List<ApplicationUser> allUsers = await db.Users.ToListAsync();
// NOTE: make sure this password complies with the password requirements set up in Identity.Config
string newPassword = "YourNewPassword!";
int passwordChangeSuccess = 0;
int countUsers = 0;
// Loop through the list of Users
foreach (var user in allUsers)
{
// Get the User
ApplicationUser thisUser = await UserManager.FindByNameAsync(user.UserName);
// Generate a password reset token
string token = await UserManager.GeneratePasswordResetTokenAsync(thisUser.Id);
// Change the password, using the reset token
IdentityResult result = await UserManager.ResetPasswordAsync(thisUser.Id, token, newPassword);
// Record results (extend to taste)
if (result.Succeeded)
{
passwordChangeSuccess++;
}
countUsers++;
}
ViewBag.CountUsers = countUsers;
ViewBag.PasswordSuccess = passwordChangeSuccess;
return View();
}
并使用ViewBag.CountUsers和ViewBag.PasswordSuccess设置一个新视图以检查结果。
然后在Account控制器中设置一个指向ResetAllPasswords的ActionLink,然后按下去。
显然格式化可以改变(也许是一个带有确认的表单,可能带有输入字段来指定密码..),但基本的控制器代码应该是好的。请注意[AllowAnonymous]属性仅用于一次性访问 - 不是一个好主意,除了测试之外还有其他功能!
这应该将所有用户重置为代码中指定的相同密码。
答案 1 :(得分:0)
是在帐户控制器中,只需转到忘记密码功能并稍微更改该代码,首先用户搜索电子邮件ID,然后系统向该用户发送邮件。 只需写下用户将邮件发送到您的特定电子邮件ID的代码,然后您可以在您的帐户中获取该链接,然后单击该链接并重置密码