Nano Hash - криптовалюты, майнинг, программирование

Как эффективно преобразовать идентификатор удостоверения asp.net по умолчанию в строку типа

Я пытаюсь добавить аутентификацию и авторизацию в свой API в .NET core 2.1. Все работало отлично. Однако, когда я пытаюсь войти в систему пользователя, я получаю эту ошибку в своей тестовой среде: «Произошло исключение при чтении значения базы данных для свойства« IdentityUser.Id ». Ожидаемый тип был «System.String», но фактическое значение был типа «System.Guid».

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

Модель пользователя приложения:

 public class ApplicationUser : IdentityUser
    {
        public override string Id { get; set; }            
        public string FirstName { get; set; }
        public string LastName { get; set; }       
    }

Вот как я подписываю пользователя:

 public async Task<object> Login ([FromBody] LoginModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }
                //use signin manager to handle user sign in
                //the error shows up in this method
                var signin = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);
                if (signin.Succeeded)
                {
                    var appuser = _userManager.Users.SingleOrDefault(u => u.Email == model.Email);
                    return await GenerateJwtToken(model.Email, appuser);
                }
            }

            catch(Exception ex)
            {
                return ex.Message;
            }

            throw new ApplicationException("INVALID LOGIN ATTEMPT");                           
           // return BadRequest("no login detail found");
        }

Это моя модель входа

 public class LoginModel
    {
        [Required]
        public string Email { get; set; }
        [Required]
        public string Password { get; set; }
    }

Я знаю, что тип identityuser.id по умолчанию — guid, и я хочу иметь возможность преобразовать/переопределить его в строку, чтобы он соответствовал моему требованию.


  • Так почему бы вам не изменить тип IdentityUser.Id на Guid? 22.10.2019
  • Все свойства IdentityUser объединены вместе и имеют тип TKey. Я бы не хотел менять его напрямую, чтобы ничего не сломать. Вот поэтому я и ищу способ сделать это 22.10.2019
  • Попробуйте получить его как есть (т. е. все, что возвращает _userManager.Users.SingleOrDefault), а затем вручную создайте из него ApplicationUser. 22.10.2019
  • он не входит в этот метод. выдает ошибку в строке var signin = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false); 22.10.2019
  • Тип по умолчанию — string, но фактически это GUID. Похоже, что кто-то (вы или кто-то из вашей команды) изменил тип столбца базы данных на GUID (уникальный идентификатор), вероятно, потому, что они думали, что nvarchar должно быть ошибкой, основываясь на значениях. 22.10.2019
  • @ChrisPratt Есть ли способ вернуть это обратно, чтобы он имел строку типа данных? 22.10.2019
  • Если это столбец с уникальным идентификатором, вам просто нужно изменить таблицу, чтобы снова сделать ее nvarchar(450), как это было бы по умолчанию. В качестве альтернативы вы можете просто использовать Guid в качестве типа ключа для Identity, что, честно говоря, вероятно, проще и лучше. 22.10.2019
  • Я не уверен, что знаю, как это сделать. любые указатели? 22.10.2019
  • Проверьте свою базу данных и подтвердите тип идентификатора в таблице AspNetUsers. Если это Guid, вы можете изменить его на nvarchar(450). Если вы хотите использовать Guid, обратитесь к примеру кода: stackoverflow.com/questions/37166098/ 23.10.2019

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..