2014-11-02 3 views
1

UserManager в Asp.Net Identity 2 предотвращает создание пользователя с двойным именем пользователя с помощью дополнительного запроса в базу данных, чтобы найти возможный дубликат. Я думаю, что это подвержено ошибкам и может вызвать ошибки параллелизма. Правильный механизм должен опираться на уникальные ограничения или индексы. Я ошибаюсь и что-то пропущу?Asp.Net Identity 2 duplicate username check

Ссылки на источник: CreateAsync и ValidateUserName

+0

Entity Framework должен поддерживать несколько хранилищ данных, а не просто базы данных на основе баз данных. Таким образом, он должен проверять уникальность таким образом, который работает для любого типа магазина. Например, у вас может быть хранилище на основе XML. Как бы вы применяли к этому уникальные ограничения? –

+0

Однако, глядя на код, к которому вы привязались, он использует пользовательский объект «UserValidator», который ... если Validator знал, что он использует хранилище данных, которое способно использовать уникальные constratraints, оно может просто вернуть true для любой проверки дубликатов код. –

ответ

3

Нет, вы не ошиблись. И Идентичность добавляет уникальный индекс на столбце Имя пользователя:

Tables generated by Identity

И код миграции для этой таблицы:

 CreateTable(
      "dbo.AspNetUsers", 
      c => new 
       { 
        Id = c.String(nullable: false, maxLength: 128), 
         /* .... SNIP .... */ 
        UserName = c.String(nullable: false, maxLength: 256), 
       }) 
      .PrimaryKey(t => t.Id) 
      .Index(t => t.UserName, unique: true, name: "UserNameIndex"); 

Уникальный индекс четко на колонке.

p.s. вы ищете Identity v3 - он не выпущен. Current Identity v2.1 еще не открыт.

+0

Хотя структура Identity действительно может применять уникальные ограничения в модели на основе EF, помните, что Identity предназначена для расширения и работы с любым типом хранилища. Поэтому, независимо от того, использует ли он уникальные ограничения, сама инфраструктура должна все же немного поработать менее эффективно, чтобы быть более расширяемыми. –

+0

Несомненно. На данный момент 'Identity.Core' не обеспечивает уникальность имени пользователя на уровне trasactional, но для этого он использует реализацию IUserStore. И когда Identity использует EF, реализуется уникальный индекс. Я не думаю, что транзакционная проверка очень важна для создания пользователей. – trailmax

Смежные вопросы