Подтвердить что ты не робот

Изменение имени пользователя ASP.NET

У меня есть сайт asp.net, в котором используется поставщик членства ASP.net. Каждый комментарий, запись и т.д. В БД отслеживается идентификатором пользователя.

Так как MS не предоставляет способ изменить имя пользователя, я нашел userNAME в таблице "users" в БД и есть только 1 место, где отображается имя пользователя.

Мой вопрос:

Безопасно ли предоставлять страницу "Редактировать профиль", где пользователю разрешено редактировать собственное имя пользователя. Конечно, я бы справился с этим изменением в фоновом режиме, напрямую изменив значение "имя пользователя" в БД.

Есть ли недостатки в этом? Я создал и модифицировал некоторые тестовые учетные записи, и, похоже, все в порядке, мне просто интересно, есть ли какие-либо известные негативы этому, прежде чем вносить его в производство.

4b9b3361

Ответ 1

Ссылка cptScarlet была хорошей, однако я презираю использование хранимых процедур, если мне это не нужно, и я предпочитаю Entity Framework, когда это возможно. Вот что я сделал, чтобы изменить имя пользователя, используя EF 4.0 и .NET 4.0:

  • Проект правой кнопки мыши → Добавить новый элемент → Модель данных сущности ADO.NET
  • Дайте ему правильное имя, я выбрал "MembershipModel.edmx" и нажмите "Добавить"
  • Выберите "Создать из базы данных" и нажмите "Далее"
  • Добавьте подключение к базе данных aspnetdb (база данных членства ASP.NET)
  • Дайте ему правильное имя, я выбрал "MembershipEntities"
  • Нажмите "Далее"
  • Сверлить в таблицы и выбрать aspnet_Users
  • Измените пространство имен модели на MemberhipModel
  • Нажмите "Готово"

Теперь вы можете добавить код для создания контекста объекта EF и изменить базу данных:

public void ChangeUserName(string currentUserName, string newUserName)
{
    using (var context = new MembershipEntities())
    {
        // Get the membership record from the database
        var currentUserNameLowered = currentUserName.ToLower();
        var membershipUser = context.aspnet_Users
            .Where(u => u.LoweredUserName == currentUserNameLowered)
            .FirstOrDefault();

        if (membershipUser != null)
        {
            // Ensure that the new user name is not already being used
            string newUserNameLowered = newUserName.ToLower();
            if (!context.aspnet_Users.Any(u => u.LoweredUserName == newUserNameLowered))
            {
                membershipUser.UserName = newUserName;
                membershipUser.LoweredUserName = newUserNameLowered;
                context.SaveChanges();
            }
        }
    }
}

Примечание. Я не учитывал идентификатор приложения в своем коде. Обычно я использую только одно приложение, использующее базу данных членства ASP.NET, поэтому, если у вас несколько приложений, вам нужно учесть это.