为什么在 ASP Identity 中导致 .Succeeded return failed

尝试在注册过程中添加添加名称的功能时,登录帐户时出错。 注册的时候登录成功,但是一登出再尝试登录,就出现登录错误

对日志文件所做的更改

            var user = CreateUser();
            await _userStore.SetUserNameAsync(user, Input.UserName, CancellationToken.None);
            await _emailStore.SetEmailAsync(user, Input.Email, CancellationToken.None);
            var result = await _userManager.CreateAsync(user, Input.Password);

这里 UserNameAsync 是邮件的标准值,我将其更改为用户名

发生错误的部分

            if (ModelState.IsValid)
        {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
            if (result.Succeeded) //Return failed
            {
                _logger.LogInformation("User logged in.");
                return LocalRedirect(returnUrl);
            }
            if (result.RequiresTwoFactor)
            {
                return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
            }
            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                return RedirectToPage("./Lockout");
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                return Page();
            }
        }

方法

你可以检查 EmailConfirmed 列是否在你的数据库中有值,如果你使用电子邮件注册,则会向你发送一封电子邮件至 comfirm。你的错误可能是由它引起的。

你也可以尝试在你的启动类中设置如下以避免错误

services.Configure<IdentityOptions>(options =>
            {
                ....
                options.SignIn.RequireConfirmedAccount = false;
                ....
             });

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据