我跟随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;
答案 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);
}