Недавно я обновил Asp.Net Identity Core
свою форму заявки с 1.0 до 2.0.
Есть новые функции, которые я хотел попробовать GenerateEmailConfirmationToken
, и т. Д.
Я использую этот проект как справочник.
Когда пользователь пытается зарегистрироваться, я получаю сообщение об ошибке во время выполнения метода Post для Register
private readonly UserManager<ApplicationUser> _userManager;
public ActionResult Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var ifUserEXists = _userManager.FindByName(model.EmailId);
if (ifUserEXists == null) return View(model);
var confirmationToken = _userRepository.CreateConfirmationToken();//this is how i'm generating token currently.
var result = _userRepository.CreateUser(model,confirmationToken);
var user = _userManager.FindByName(model.EmailId);
if (result)
{
var code = _userManager.GenerateEmailConfirmationToken(user.Id);//error here
_userRepository.SendEmailConfirmation(model.EmailId, model.FirstName, confirmationToken);
//Information("An email is sent to your email address. Please follow the link to activate your account.");
return View("~/Views/Account/Thank_You_For_Registering.cshtml");
}
}
//Error("Sorry! email address already exists. Please try again with different email id.");
ModelState.AddModelError(string.Empty, Resource.AccountController_Register_Sorry__User_already_exists__please_try_again_);
return View(model);
}
В линии
var code = _userManager.GenerateEmailConfirmationToken(user.Id);
Я получаю сообщение об ошибке:
No IUserTokenProvider is registered.
А пока я просто хотел посмотреть, какой код он генерирует. Есть ли какие-то изменения, которые мне нужно внести в мой ApplicationUser
класс, унаследованный от IdentityUser
класса?
Или мне нужно что-то изменить, чтобы эта функция заработала?
c#
asp.net
asp.net-identity-2
Cybercop
источник
источник
Ответы:
Вы должны указать,
UserTokenProvider
чтобы сгенерировать токен.Вам также следует прочитать эту статью: Добавление двухфакторной аутентификации в приложение с использованием удостоверения ASP.NET .
источник
"Sample"
и"EmailConfirmation"
? какой-то текст, который может быть чем угодно?UserManager
В настоящее время в ASP.NET Core можно настроить службу по умолчанию в Startup.cs следующим образом:
Нет необходимости звонить
DpapiDataProtectionProvider
или что-то в этом роде. DefaultTokenProviders () позаботится о вызове GenerateEmailConfirmationToken из UserManager.источник
В дополнение к принятому ответу я хотел бы добавить, что этот подход не будет работать на веб-сайтах Azure, вы получите CryptographicException вместо токена.
Чтобы исправить это для Azure, реализуйте свой собственный IDataProtector: см. Этот ответ
Чуть подробнее в блоге
источник
Мое решение:
Моя проблема с этим кодом решена.
Удачи, друзья.
источник
На случай, если кто-то совершит ту же ошибку, что и я. Я попытался создать функцию, подобную приведенной ниже, и, конечно же, выдала ошибку «Нет IUserTokenProvider не зарегистрирован». пропал. Однако как только я попытался использовать ссылку, сгенерированную из callbackUrl, я получил сообщение об ошибке «Недопустимый токен». Чтобы он работал, вам нужно получить HttpContext UserManager. Если вы используете стандартное приложение ASP.NET MVC 5 с отдельными учетными записями пользователей, вы можете сделать это, как показано ниже.
Код, который работает:
Сначала попробуйте, это не сработает,
No IUserTokenProvider is registered.
исчезнет, но получится созданный URLInvalid token.
.источник
Согласно пискеру выше
В startup.cs вы можете использовать
В .net core 2.0 вам может потребоваться добавить в startup.cs:
У меня это сработало.
источник
При изменении файлов идентификаторов .NET Core я наткнулся на эту ошибку:
В
функция не смогла сгенерировать токен, потому что при регистрации нового пользователя не было доступного провайдера. Однако эту ошибку легко исправить!
Если вы похожи на меня, вы изменили
AddDefaultIdentity
вStartup.cs
файле сAddIdentity
. Я хотел реализовать своего собственного пользователя, унаследованного от базового пользователя. Сделав это, я потерял поставщиков токенов по умолчанию. Исправление заключалось в том, чтобы добавить их обратно с помощьюAddDefaultTokenProviders()
.После этого исправления все снова заработало!
источник: https://mattferderer.com/NotSupportedException-No-IUserTwoFactorTokenProvider-tuser- named-default-registered
источник
Я получил ту же ошибку после обновления Identity и обнаружил, что это связано с тем, что я использовал Unity.
См. Эту ветку вопросов по решению: Зарегистрируйте IAuthenticationManager в Unity
Также ниже для быстрой справки:
источник
GeneratePasswordResetToken
- но возникла та же ошибка «IUserTokenProvider не зарегистрирован»). После добавленияcontainer.RegisterType<ApplicationUserManager>( new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
кUnityConfig.cs
, он работал.Вам также может быть интересно посмотреть здесь:
Как реализовать TokenProvider в ночной сборке ASP.NET Identity 1.1?
использовать реализацию поставщика токенов по умолчанию из пакета Microsoft.Identity.Owin
источник
в IdentityConfig.cs добавьте свой вариант с двумя факторами:
источник