我只是在我的项目中添加了MVC 5的“忘记密码”部分,在收到邮件后我无法更改密码。
错误:在应用程序中=
在Visual Studio中=
错误来源代码:
public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var user = await UserManager.FindByEmailAsync(model.Email);
if (user == null)
{
// Don't reveal that the user does not exist
return RedirectToAction("ResetPasswordConfirmation", "Account");
}
var code = model.Code.Replace(" ","+");
**var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);**
if (result.Succeeded)
{
return RedirectToAction("ResetPasswordConfirmation", "Account");
}
AddErrors(result);
return View();
}
我在stackoverflow和其他方面尝试了很多东西,但都没有成功。
如果你知道我为什么会出现这个错误:)
我使用在创建ASP时提出的基本模板。NET web app。我可以上传你想要的所有代码文件,只要问你需要什么帮助我,我会在2分钟内上传!
谢谢
我发现了问题所在,
我的Call backUrl具有带有令牌特殊字符和大写的格式
首先在ForgotPasswordViewModel中,我手动生成URL,然后对其进行正确编码
string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
code = System.Web.HttpUtility.UrlEncode(code);
string datcode = code;
//var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
var datUrl = "http://localhost:62989/Account/Resetpassword?" + user.Id + "&Code=" + code;
对于大写问题,我在将callbackurl分配给emai消息时忘记了ToTitleCase方法,所以我删除了它。
message = message.Replace("@ViewBag.Name", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(usernom));
message = message.Replace("@ViewBag.CallBackUrl", datUrl);
await MessageServices.SendEmailAsync(model.Email, emailSubject, message);
其次,我重置PasswordViewModel,用
var code = WebUtility.UrlDecode(model.Code);
用原来的空白处代替,
code = code.Replace(' ', '+');
最后,它在ResetPasswordAsync函数中工作得很好!
var result = await UserManager.ResetPasswordAsync(user.Id, code, model.Password);
谢谢拉维的帮助
假设您使用的是默认模板,您可能会使用下面的代码来生成callbackUrl
string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
您需要在将code
(令牌)发送到电子邮件之前对其进行url编码,即将其更改为code=HttpUtivics。UrlEncode(code)
您不需要这一行。密码替换(“,”)
希望这有帮助。
我的问题非常相似,但碰巧是我的路由引擎将所有URL转换为小写(用于搜索引擎优化等)。我需要确保查询字符串参数允许混合大小写。Base64使用混合大小写。
我将NoLowercaseQueryString属性添加到我的每个控制器方法中。这是特定于MVC样板项目的。
每当我试图将电子邮件输入alertdialog时,我都会出错。我试图让它发送一个恢复密码的电子邮件输入。这是我收到的代码和错误消息 代码: 错误:
如何获取新ASP中用户的密码。网络身份识别系统?或者如何在不知道当前密码(用户忘记密码)的情况下重置?
我正在ASP. NET中实现自己的重置密码。在重置密码中,首先我创建一个随机字符串并将其邮寄到用户电子邮件。对于电子邮件中的链接,如http://xyz.com/account/forgot?random=xxxx
我们刚刚启动了我们的ASP。NETMVC(使用Identity 2.0)web应用程序6天前已经有超过5000人注册了帐户,太棒了! 问题是3-5%点击确认电子邮件链接的用户(似乎也是重置密码)会出现错误屏幕,大概是因为他们有一个无效的令牌。 我在StackOverflow上读到,您需要对url进行编码,以避免特殊字符将其丢弃,然后在验证之前对其进行解码。不过,我这样做没有效果,一些用户仍然在他们
我有两台服务器使用相同的ASP。NET核心标识后端。我使用以下命令生成密码重置令牌: 我通过电子邮件链接发送此令牌。当用户单击链接时,他们会被带到一个单独的站点,该站点应提供一个用户界面来更改密码。以下代码处理用户提交令牌及其新密码的密码: 在第二台服务器上,标识结果总是返回false,因为“无效令牌”。 通过查看源代码,我看到令牌是使用IP地址生成的(因此我理解令牌验证失败的原因)。 我的问题是
我正在尝试使用文档在我的Laravel 5.1应用程序上重置密码。当我点击send password reset(发送密码重置)按钮时,会出现以下错误。 QueryException in Connection.php第651行:SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“email”(SQL:delete fromwhere=abc@abc.com).