我创建了MVC 4应用程序。 在那个应用程序中
如果用户忘记了密码,我有办法向用户发送电子邮件 重置密码。
如果管理员想要更改用户当前密码,我可以使用相关详细信息向用户发送电子邮件。
我尝试发送电子邮件时遇到同样的错误
我收到如下错误
我似乎在尝试发送电子邮件时遇到问题,我使用的是asp.net身份会员
这是Forgot Password Method的相关代码段
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if(ModelState.IsValid)
{
var username = await UserManager.FindByNameAsync(model.UserName);
var user = await UserManager.FindByEmailAsync(model.Email);
if (user != null && username != null)
{
var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("My_Application");
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(
........
这是编辑用户方法的相关代码段
[HttpPost]
[CustomAuthorization(IdentityRoles = "Admin")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit_User(EditUserViewModel editUser)
{
try
{
if (ModelState.IsValid)
{
AspNetUser user = db.AspNetUsers.Find(editUser.Id);
if(editUser.Change == "Yes"){
String userId = editUser.Id;
String newPassword = editUser.NewPassword;
var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("My_Application");
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(
................................................
似乎在同一地点遇到问题,但还无法弄清楚
答案 0 :(得分:2)
我有同样的问题,经过多次研究后我发现问题出在IIS部署中
所以按照这个帖子我能解决我的问题
The data protection operation was unsuccessful
- 打开IIS管理器
- 通过选择您的应用程序,右键单击它,然后选择管理应用程序 - &gt;,找出您的应用程序正在使用的AppPool。高级 设置。
- 之后,在左上角选择“应用程序池”,然后选择应用程序使用的应用程序池。
- 右键单击它,然后选择高级设置,转到流程模型部分,找到&#34;加载用户配置文件&#34;选项并将其设置为 真。
醇>
答案 1 :(得分:0)
我看到了
if (user != null && username != null)
你试图在构造函数中设置它们吗?如果是这样,你就不能在方法中设置它们。
答案 2 :(得分:0)
您收到错误代码的错误代码。
public static CustomUserManager CreateUserManager(IdentityFactoryOptions<CustomUserManager> options, IOwinContext context)
{
var manager = new CustomUserManager(new CustomUserStore(context.Get<CustomIdentityDbContext>()));
manager.UserValidator = new UserValidator<CustomUser, int>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
manager.UserLockoutEnabledByDefault = true;
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(10);
manager.MaxFailedAccessAttemptsBeforeLockout = 5;
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
};
manager.EmailService = new IdentityEmailService();
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider = new DataProtectorTokenProvider<CustomUser, int>(dataProtectionProvider.Create("My_Application"))
{
TokenLifespan = TimeSpan.FromHours(2)
};
}
return manager;
}
你应该写信给Startup.Auth类。骗这个:
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider = new DataProtectorTokenProvider<CustomUser, int>(dataProtectionProvider.Create("FocusOnStoreService"))
{
TokenLifespan = TimeSpan.FromHours(2)
};
}
用户管理器定义和设置
let myArray = ["Step 6", "Step 12", "Step 10"]
let ans = sorted(myArray,{ (s1, s2) in
return s1.localizedStandardCompare(s2) == NSComparisonResult.OrderedAscending
})
println(ans)
// [Step 6, Step 10, Step 12]
重要:你必须小心
let ans = myArray.sorted {
(s1, s2) -> Bool in return s1.localizedStandardCompare(s2) == .orderedAscending
}