忘记密码方法&编辑用户方法不起作用

时间:2015-06-23 11:03:25

标签: c# asp.net asp.net-mvc asp.net-identity email-confirmation

我创建了MVC 4应用程序。  在那个应用程序中

  1. 如果用户忘记了密码,我有办法向用户发送电子邮件 重置密码。

  2. 如果管理员想要更改用户当前密码,我可以使用相关详细信息向用户发送电子邮件。

  3. 我尝试发送电子邮件时遇到同样的错误

    我收到如下错误

    1. 我收到忘记密码方法错误
    2. enter image description here

      1. 我在编辑用户方法
      2. 时遇到错误

        enter image description here

        我似乎在尝试发送电子邮件时遇到问题,我使用的是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(
        ................................................
        

        似乎在同一地点遇到问题,但还无法弄清楚

3 个答案:

答案 0 :(得分:2)

我有同样的问题,经过多次研究后我发现问题出在IIS部署中

所以按照这个帖子我能解决我的问题

The data protection operation was unsuccessful

  
      
  1. 打开IIS管理器
  2.   
  3. 通过选择您的应用程序,右键单击它,然后选择管理应用程序 - &gt;,找出您的应用程序正在使用的AppPool。高级   设置。
  4.   
  5. 之后,在左上角选择“应用程序池”,然后选择应用程序使用的应用程序池。
  6.   
  7. 右键单击它,然后选择高级设置,转到流程模型部分,找到&#34;加载用户配置文件&#34;选项并将其设置为   真。
  8.   

答案 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
}