我创建了MVC 4应用程序。在该应用程序中如果用户忘记了密码,我有方法向用户发送电子邮件以重置密码。我使用的是asp.net身份会员资格
我在Web服务器中部署此项目时收到以下错误消息。它完全在我的本地主机模式下工作。
错误消息
无法编辑此用户数据保护操作失败。 这可能是因为没有加载用户配置文件引起的 当前线程的用户上下文,可能是当时的情况 线程冒充。!
这是忘记密码方法
[AllowAnonymous]
public ActionResult ForgotPassword()
{
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (model.UserName == null)
{
ModelState.AddModelError("", "Please enter the Username");
}
if (model.Email == null)
{
ModelState.AddModelError("", "Please enter the Email ID");
}
if (model.Email == null & model.UserName == null)
{
ModelState.AddModelError("", "Please enter the Username and Email ID");
}
if(ModelState.IsValid)
{
var username = await UserManager.FindByNameAsync(model.UserName);
var user = await UserManager.FindByEmailAsync(model.Email);
if (user != null && username != null)
{
ApplicationDbContext context = new ApplicationDbContext();
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context);
var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("MyProject");
UserManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(provider.Create("EmailConfirmation"));
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
System.Net.Mail.MailMessage m = new System.Net.Mail.MailMessage(
new System.Net.Mail.MailAddress("sample@email.lk", "My Application"),
new System.Net.Mail.MailAddress(user.Email));
m.Subject = "Reset your Password";
m.IsBodyHtml = true;
m.Body = string.Format("<img src=\"@@IMAGE@@\" alt=\"\"><BR/><BR/>Hi {0},<BR/><BR/>Please click the below link to reset your password. <BR/><BR/> <a href=\"{1}\" title=\"Reset Password\">Reset Password</a>", user.UserName, Url.Action("ResetPassword", "Account", new { UserId = user.Id, code = code }, Request.Url.Scheme)) + string.Format("<BR/><BR/>Regards,<BR/>We Are <BR/>");
string attachmentPath = Server.MapPath("~/Images/hec-logo.png");
string contentID = Path.GetFileName(attachmentPath).Replace(".", "") + "@zofm";
Attachment inline = new Attachment(attachmentPath);
inline.ContentDisposition.Inline = true;
inline.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
inline.ContentId = contentID;
inline.ContentType.MediaType = "image/png";
inline.ContentType.Name = Path.GetFileName(attachmentPath);
m.Attachments.Add(inline);
// replace the tag with the correct content ID
m.Body = m.Body.Replace("@@IMAGE@@", "cid:" + contentID);
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("11.11.11.111");
smtp.Port = 11;
smtp.Credentials = new System.Net.NetworkCredential("sample@email.lk", "8888888");
smtp.EnableSsl = false;
smtp.Send(m);
// Don't reveal that the user does not exist or is not confirmed
}
return View("ForgotPasswordConfirmation");
}
else
{
ModelState.AddModelError("", "The Username or Email ID is invalid.");
}
// If we got this far, something failed, redisplay form
return View(model);
}
答案 0 :(得分:9)
我有同样的问题,经过多次研究后我发现问题出在IIS部署中
所以按照这个帖子我能解决我的问题
打开IIS管理器
通过选择您的应用程序,右键单击它,然后选择管理应用程序 - &gt;,找出您的应用程序正在使用的AppPool。高级
设置。
之后,在左上角选择“应用程序池”,然后选择应用程序使用的应用程序池。
右键单击它,然后选择高级设置,转到过程模型部分并找到“加载用户配置文件”选项并将其设置为
真。