如何验证Asp.Net Core中的AspNetUsers表中是否存在电子邮件地址

时间:2016-09-29 17:39:15

标签: asp.net-core asp.net-identity

我跟随https://docs.asp.net/en/latest/mvc/models/validation.html?highlight=remote#remote-validation中的示例 关于如何使用Remote属性:

[AcceptVerbs("Get", "Post")]
public IActionResult VerifyEmail(string email)
{
    if (!_userRepository.VerifyEmail(email))
    {
        return Json(data: $"Email {email} is already in use.");
    }

    return Json(data: true);
}

如您所见,建议使用VerifyEmail方法创建存储库...

如果可以使用UserManager.FindByEmailAsync(string email),我会徘徊 在帐户控制器的VerifyEmail中,而不是使用此代码实现存储库:

var user = context.Users.FirstOrDefault(u => u.Email == email);
return user ? true : false;  

2 个答案:

答案 0 :(得分:0)

是的,您可以将UserManager包装在存储库中。

我用它来验证用户凭据,如下所示:

    /// <summary>
    /// Verifies the user password
    /// </summary>
    /// <param name="user"></param>
    /// <param name="password"></param>
    /// <returns></returns>
    public async Task<Result<bool>> CheckUserPasswordAsync(User user, string password)
    {
        var result = new Result<bool>();
        try
        {
            result.Data = await _userManager.CheckPasswordAsync(user, password);
        }
        catch (Exception ex)
        {
            result.HandleException(ex, _logger);
        }
        return result;
    }

我有一个带有以下构造函数的UserService,它允许我对用户执行操作:

    public UserService(
        RoleManager<ApplicationRole> roleManager,
        UserManager<User> userManager,
        SignInManager<User> signInManager,
        ILoggerFactory loggerFactory,
        IRepository repository)
    {
        _roleManager = roleManager;
        _userManager = userManager;
        _signInManager = signInManager;
        _logger = loggerFactory.CreateLogger<IUserService>();
        _repository = repository;
    }

在Startup.cs中,您必须在ConfigureServices方法中添加实体:

                // add identity
                services.AddIdentity<User, ApplicationRole>()
                        .AddEntityFrameworkStores<BlogCoreContext>();

您可以按照FindByEmailasync方法的相同逻辑;)

希望这有助于编码!

答案 1 :(得分:0)

您必须从构造函数中注入usermanager服务

public class AJAXController : Controller
        {

            private readonly UserManager<ApplicationUser> _userManager;
            public AJAXController(UserManager<ApplicationUser> userManager)
            {
                _context = context;
                _userManager = userManager;
            }


    [AcceptVerbs("GET", "POST")]
            public async Task<IActionResult> VerifyEmail([FromQuery(Name = "Input.Email")]string email)
            {

                var resultuser =  await _userManager.FindByEmailAsync(email);
                if (resultuser.UserName != null)
                {
                    return Json($"l'Email {email} è già in uso.");
                }

                return Json(true);
            }