【问题标题】:Forgot Password method & Edit User method not working忘记密码方法和编辑用户方法不起作用
【发布时间】:2015-06-23 11:03:25
【问题描述】:

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

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

  2. 如果管理员想更改用户当前密码,我有办法向用户发送一封包含相关详细信息的电子邮件。

所以我在尝试发送电子邮件时遇到了同样的错误

我遇到如下错误

  1. 忘记密码方法出现错误

  1. 编辑用户方法出现错误

我在尝试发送电子邮件时似乎遇到了问题,我正在使用 asp.net Identity 会员资格

这是忘记密码方法的相关代码sn-p

            [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(
                        ........

这是编辑用户方法的相关代码sn-p

    [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(
................................................

好像在同一个地方有问题,但还没弄明白

【问题讨论】:

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


    【解决方案1】:

    我也遇到了同样的问题,经过多次研究我发现问题出在 IIS 部署中

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

    The data protection operation was unsuccessful

    1. 打开 IIS 管理器
    2. 通过选择您的应用程序找出您的应用程序正在使用的 AppPool,右键单击它,然后选择管理应用程序 -> 高级 设置。
    3. 之后,在左上角选择 Applications Pools,然后继续选择您的应用使用的 App Pool。
    4. 右键单击它,然后选择高级设置,转到流程模型部分并找到“加载用户配置文件”选项并将其设置为 是的。

    【讨论】:

      【解决方案2】:

      我明白了

      if (user != null && username != null)
      

      您是否要在构造函数中设置它们?如果是这样,你不能,你需要在方法中设置它们。

      【讨论】:

      • 嗯没有在构造函数中设置这些细节,这些细节填写模型,如果模型状态良好,方法可以继续,我刚刚更新了方法,nw你可以看到它我认为,问题出在电子邮件发送中接近
      【解决方案3】:

      您收到的错误代码写错了地方。

      var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("My_Application");
      UserManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(provider.Create("EmailConfirmation"));
      

      您应该写入 Startup.Auth 类。撒谎:

      app.CreatePerOwinContext(IdentityFactory.CreateContext);
      app.CreatePerOwinContext<CustomUserManager>(IdentityFactory.CreateUserManager);
      

      用户管理器定义和设置

       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;
              }
      

      重要提示:这里你要小心

       var dataProtectionProvider = options.DataProtectionProvider;
                  if (dataProtectionProvider != null)
                  {
                      manager.UserTokenProvider = new DataProtectorTokenProvider<CustomUser, int>(dataProtectionProvider.Create("FocusOnStoreService"))
                      {
                          TokenLifespan = TimeSpan.FromHours(2)
                      };
                  }
      

      【讨论】:

        猜你喜欢
        • 2012-02-28
        • 2010-12-31
        • 2018-07-27
        • 2012-06-09
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多