【问题标题】:Asp.Net Identity - case insensitive email and usernamesAsp.Net Identity - 不区分大小写的电子邮件和用户名
【发布时间】:2014-07-15 15:30:31
【问题描述】:

有没有办法让 Asp.Net Identity 对电子邮件地址和用户名不区分大小写?

目前,如果我调用“FindByEmailAsync(email)”,它只有在电子邮件地址完全按照输入的方式存储时才有效(区分大小写)

【问题讨论】:

    标签: asp.net asp.net-identity claims-based-identity


    【解决方案1】:

    您可以更改用户的注册方式,以便将用户名设置为小写,登录时也是如此。

    用于注册用户,在 AccountController 中

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser() { UserName = model.Email.ToLowerInvariant(), Email = model.Email };
                IdentityResult result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    await SignInAsync(user, isPersistent: false);
    
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    AddErrors(result);
                }
            }
    

    对于登录:

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                var user = await UserManager.FindAsync(model.Email.ToLowerInvariant(), model.Password);
                if (user != null)
                {
                    await SignInAsync(user, model.RememberMe);
                    return RedirectToLocal(returnUrl);
                }
                else
                {
                    ModelState.AddModelError("", "Invalid username or password.");
                }
            }
    
            // If we got this far, something failed, redisplay form
            return View(model);
        }
    

    【讨论】:

    • Asp.Net Identity 中没有设置不区分大小写吗?
    • 我知道,只有 PasswordValidator 选项,你可以在静态 Create 方法的 ApplicationUserManager 类中找到它们
    • 关于用户名,唯一的选项是:AllowOnlyAlphanumericUserNames 和 RequireUniqueEmail :(。您可以在数据库中更改它们。您可以使用 Management Studio(如果您使用 SQL 服务器)或如果你想使用新的 Identity 东西,你可以使用 IdentityDbContext。在 Identity 2.0 中,它存储在 OwinContext 中,你可以通过 HttpContext.GetOwinContext().Get(); 在控制器操作中获取它;跨度>
    • 我认为这将基于您的数据库配置。如果数据库设置为不区分大小写,那么您的查找将不区分大小写。密码不是因为它们是散列值。
    • 这个答案应该只是说:“不,所以使用ToLower()
    猜你喜欢
    • 2018-06-28
    • 1970-01-01
    • 2015-07-20
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多