ASP.NET MVC Идентичность.Невозможно добавить роли пользователям со специальными символами - PullRequest
0 голосов
/ 07 июня 2019

В своем веб-приложении MVC я использую ASP Identity для входов пользователей в систему, а также для авторизации на основе ролей.

Проблема, с которой я сталкиваюсь, заключается в добавлении роли пользователю с электронным письмом, имеющим специальный символ. например. test'test@123.com

Я могу без особых проблем создать / зарегистрировать пользователя со специальным символом, проблема возникает только тогда, когда я пытаюсь добавить роль этому конкретному пользователю.

Я попытался изменить файл конфигурации идентификации для User Validator

  manager.UserValidator = new UserValidator<ApplicationUser>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

Вот код для добавления роли к пользователю.

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult RoleAddToUser(string UserName, string RoleName)
    {
        var context = new HolidayTracker.Models.ApplicationDbContext();

        if (context == null)
        {
            throw new ArgumentNullException("context", "Context must not be null.");
        }

        ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();

        var userStore = new UserStore<ApplicationUser>(context);
        var userManager = new UserManager<ApplicationUser>(userStore);
        userManager.AddToRole(user.Id, RoleName);


        ViewBag.Message = "Role created successfully !";

        // Repopulate Dropdown Lists
        var rolelist = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name, Text = rr.Name }).ToList();
        ViewBag.Roles = rolelist;
        var userlist = context.Users.OrderBy(u => u.UserName).ToList().Select(uu =>
        new SelectListItem { Value = uu.UserName, Text = uu.UserName }).ToList();
        ViewBag.Users = userlist;

        return View("Index");
    }

Я добавил точки останова, и действие завершилось успешно, но я думаю, что проблема в том, что роль создается, но не для этого конкретного символа в имени пользователя. Т.е. вместо добавления символа "" "перед добавлением роли, следовательно, эта роль не назначается этому пользователю.

Ожидаемый результат - добавление роли пользователю, несмотря на наличие специального символа в имени пользователя.

Примечание: на данный момент это проблема апострофов. Также пользователи основаны на электронных письмах.

1 Ответ

0 голосов
/ 07 июня 2019

Итак, благодаря помощи @CodeCaster, я смог найти проблему с маршрутом и добавил валидатор.

  public ActionResult RoleAddToUser(string UserName, string RoleName)
    {
        var context = new HolidayTracker.Models.ApplicationDbContext();

        if (context == null)
        {
            throw new ArgumentNullException("context", "Context must not be null.");
        }

        ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();

        var userStore = new UserStore<ApplicationUser>(context);
        var userManager = new UserManager<ApplicationUser>(userStore);
        userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false };
        userManager.AddToRole(user.Id, RoleName);
        var Check = userManager.AddToRole(user.Id, RoleName);

        ViewBag.Message = "Role created successfully !";

        // Repopulate Dropdown Lists
        var rolelist = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name, Text = rr.Name }).ToList();
        ViewBag.Roles = rolelist;
        var userlist = context.Users.OrderBy(u => u.UserName).ToList().Select(uu =>
        new SelectListItem { Value = uu.UserName, Text = uu.UserName }).ToList();
        ViewBag.Users = userlist;

        return View("Index");
    }
...