Normalizedemail 未添加到 asp.net core 中的 AspNetUsers 表中

问题描述 投票:0回答:1

我在很多应用程序中使用了 Asp.net 身份管理器,它们都工作得很好。

我检查了其他代码库,除了启动类中的密码覆盖之外,逻辑是相同的。我不明白为什么没有添加NormalizedEmail。

启动.cs

                .AddEntityFrameworkStores<CorporateIdentityContext>()
                .AddDefaultTokenProviders();

            //override identity Password rule
            services.Configure<IdentityOptions>(opts => {
                opts.Password.RequiredLength = 6;
                opts.Password.RequireNonAlphanumeric = false;
                opts.Password.RequireLowercase = false;
                //opts.Password.RequireUppercase = true;
                opts.Password.RequireDigit = false;
                opts.User.RequireUniqueEmail = true;
                //opts.SignIn.RequireConfirmedEmail = false;
                opts.User.AllowedUserNameCharacters =  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
                //options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+/";
                //opts.User.AllowedUserNameCharacters = null;

            });

创建用户方法

public async Task<ServiceResponse<GetUserDto>> RegisterUser(UserDto payload)
        {
            var serviceResponse = new ServiceResponse<GetUserDto>();
            //Check if user already or register here
            //var CorporateUser = await _userManager.Users.FirstOrDefaultAsync(x => x.Email == payload.Email);

           

            //This is the standard
            var CorporateUser = await _userManager.FindByNameAsync(payload.Email);

            if (CorporateUser != null)
            {
                _logger.LogInformation($"User already exist for this email: {CorporateUser.Email}");
                serviceResponse.Message = $"User already exist for this email: {CorporateUser.Email}";
                serviceResponse.Success = false;
                return serviceResponse;
            }
             
            var password = Helper.ServiceHelper.GeneratePassword(7);
            var uniqueId = ServiceHelper.GeneratePolNumber();
            var refnum = ServiceHelper.GeneratePropNumber();

            var newUser = new CorporateIdentityUser
            {
                Email = payload.Email,
                UserName = payload.UserName,
                UserUniqueId = uniqueId,
                NormalizedEmail = payload.Email.ToUpper(),
                //NormalizedUserName = payload.Email,
                RefrenceId = refnum,
                FirstName = payload.FirstName,
                LastName = payload.LastName,
                CompanyName = payload.CompanyName,
                BrokerName = payload.BrokerName,
                AccountType = "Generaluser",
                Country = payload.Country,
                RcNumber = payload.RcNumber,
                DateCreated = DateTime.Now,
                Address = payload.Address,
                Occupation = payload.Occupation,
                Gender =payload.Gender,
                DateofBirth = payload.DateofBirth,
                IsActive = false,
                IsWallet = false,
                IsBroker = false,
                PhoneNumber = payload.PhoneNumber,
                SecurityStamp = Guid.NewGuid().ToString()
            };

            try
            {
                var result = await _userManager.CreateAsync(newUser, password);

                if (!result.Succeeded)
                {
                    var errorMsg = string.Empty;
                    foreach (var error in result.Errors)
                    {
                        _logger.LogError($"The error occur while registring {newUser.Email}: {error.Code}, {error.Description}");
                        errorMsg = error.Description;

                    }

                    serviceResponse.Message = errorMsg;
                    serviceResponse.Success = false;
                }
                else
                {

                    var confirmEmailToken = await _userManager.GenerateEmailConfirmationTokenAsync(newUser);
                    var encodedEmailToken = Encoding.UTF8.GetBytes(confirmEmailToken);
                    var validEmailtoken = WebEncoders.Base64UrlEncode(encodedEmailToken);

                    var body = new Dictionary<string, object>()
                    {
                        { "name",   payload.FirstName.ToUpper() +" "+ payload.LastName},
                        { "password", password},
                        {"email", payload.Email },
                        {"temp_id", 27059391}
                    };

                await Helper.ServiceHelper.SendEmailVerificationViaPostmarkAsync(body);
               
                serviceResponse.Data = _mapper.Map<GetUserDto>(newUser);
                serviceResponse.Message = "Registration Successful";
                serviceResponse.Success = true;

                    _logger.LogInformation($"Registration successfull for this username: {newUser.Email}");

                }
                
            }
            catch (Exception ex)
            {
                string error = ex.Message;
                serviceResponse.Message= error;
                _logger.LogError($"Error occured! Message {ex.Message} Stack Trace {ex.StackTrace}");
                //throw;
            }
            return serviceResponse;
        }
c# asp.net asp.net-core asp.net-identity
1个回答
0
投票

我知道这是一个古老的问题,但我面临着同样的问题,即使

NormalizedEmail
字段已正确填充,
null
字段始终被保存为
Email

我的问题是,从

IdentityUser
继承的自定义用户类拥有自己的
Email
属性。删除它并依赖继承的
Email
属性解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.