CustomUserValidator类允许使用相同的电子邮件地址,或相同的用户名来验证asp.net核心

时间:2017-05-08 19:13:01

标签: asp.net-identity asp.net-core-mvc entity-framework-core

我正在开发一个网站,我正在坚持使用不同的第三方认证提供商(谷歌,微软,Facebook,Twitter等等)测试身份验证。 对于他们所有人我需要使用我的电子邮件地址;这是我用来注册和创建我的帐户的那个。 我和Goolge一起开始了。一切都运作良好。比我搬到微软,Facebook。

现在的问题是我收到一条错误消息告诉我: 我的电子邮件已被拍摄 2.我的用户名已被更改

解决问题1.非常简单。只需设置

services.AddIdentity<ApplicationUser, IdentityRole>(opts => {
            opts.User.RequireUniqueEmail = false;
        })

in

public void ConfigureServices(IServiceCollection services)

为了解决第2点,我正在考虑创建一个CustomUserValidator类。

我的课程看起来像那样

public class CustomUserValidator : UserValidator<ApplicationUser>
{
    public override async Task<IdentityResult> ValidateAsync(
        UserManager<ApplicationUser> manager,
        ApplicationUser user)
    {
        IdentityResult result = await base.ValidateAsync(manager, user);

        List<IdentityError> errors = result.Succeeded ? new List<IdentityError>() : result.Errors.ToList();

        //check username availability. and add a custom error message to the returned errors list.
        var existingAccount = await manager.FindByNameAsync(user.UserName);

        if (user.Email.ToLower() == existingAccount.ToString().ToLower())
        {

            return errors.Count == 0 ? IdentityResult.Success : IdentityResult.Failed(errors.ToArray());
        }


        return errors.Count == 0 ? IdentityResult.Success : IdentityResult.Failed(errors.ToArray());

    }
}

知道如何输入代码来验证用户名吗? 我的想法是当当前用户的电子邮件与已经存储在经过身份验证的注册用户中的电子邮件匹配时传递IdentityResult.Success.Succeeded。就我而言,我正在开发网站。

非常感谢你的帮助。

0 个答案:

没有答案