Recentemente atualizei Asp.Net Identity Core
meu formulário de inscrição 1.0 para 2.0.
Existem novos recursos que eu gostaria de experimentar GenerateEmailConfirmationToken
, etc.
Estou usando este projeto como referência.
Quando o usuário tenta se cadastrar, recebo um erro durante a execução do método Post de 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);
}
Na linha
var code = _userManager.GenerateEmailConfirmationToken(user.Id);
Eu recebo um erro dizendo:
No IUserTokenProvider is registered.
Por enquanto, eu só queria ver que tipo de código ele gera. Há alguma mudança que preciso fazer em minha ApplicationUser
classe que herda da IdentityUser
classe?
Ou há algo que preciso alterar para que essas funções funcionem?
c#
asp.net
asp.net-identity-2
Cybercop
fonte
fonte
Respostas:
Você deve especificar um
UserTokenProvider
para gerar um token.Você também deve ler este artigo: Adicionando a autenticação de dois fatores a um aplicativo usando a identidade ASP.NET .
fonte
"Sample"
e"EmailConfirmation"
? algum texto que pode ser qualquer coisa?UserManager
No ASP.NET Core hoje em dia é possível configurar um serviço padrão no Startup.cs assim:
Não há necessidade de ligar para o
DpapiDataProtectionProvider
ou qualquer coisa parecida. O DefaultTokenProviders () cuidará da chamada para GenerateEmailConfirmationToken do UserManager.fonte
Além da resposta aceita, gostaria de acrescentar que essa abordagem não funcionará em sites da Web do Azure, você obteria CryptographicException em vez de um token.
Para consertá-lo para o Azure, implemente seu próprio IDataProtector: veja esta resposta
Um pouco mais detalhes na postagem do blog
fonte
Minha solução:
Meu problema com este código foi resolvido.
Boa sorte, amigos.
fonte
Caso mais alguém cometa o mesmo erro que eu. Tentei fazer uma função como a abaixo e com certeza o erro "Nenhum IUserTokenProvider está registrado." foi embora. No entanto, assim que tentei usar o link gerado em "callbackUrl", recebi o erro "Token inválido". Para que funcione, você precisa obter o HttpContext UserManager. Se você estiver usando um aplicativo ASP.NET MVC 5 padrão com contas de usuário individuais, você pode fazer como abaixo.
Código que funciona:
Primeiro tente que não funcione,
No IUserTokenProvider is registered.
se foi, mas a URL criada foi mantidaInvalid token.
.fonte
De acordo com pisker acima
Em startup.cs você pode usar
No .net core 2.0, você pode precisar adicionar ao startup.cs:
Isso funcionou bem pra mim.
fonte
Ao modificar os arquivos de identidade do .NET Core, me deparei com este erro:
o
A função não pôde gerar um token porque nenhum provedor estava disponível ao registrar um novo usuário. Este erro pode ser facilmente corrigido!
Se você for como eu, mudou
AddDefaultIdentity
noStartup.cs
arquivo paraAddIdentity
. Eu queria implementar meu próprio usuário herdado do usuário base. Ao fazer isso, perdi os provedores de token padrão. A solução era adicioná-los de volta comAddDefaultTokenProviders()
.Depois dessa correção, tudo funcionou novamente!
fonte: https://mattferderer.com/NotSupportedException-No-IUserTwoFactorTokenProvider-tuser-named-default-registered
fonte
Recebi o mesmo erro após atualizar o Identity e descobri que era porque eu estava usando o Unity.
Veja este tópico de perguntas sobre a solução: Register IAuthenticationManager with Unity
Também abaixo para referência rápida:
fonte
GeneratePasswordResetToken
- mas recebi o mesmo erro de "Nenhum IUserTokenProvider está registrado"). Depois de adicionarcontainer.RegisterType<ApplicationUserManager>( new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
aUnityConfig.cs
, funcionou.Você também pode estar interessado em olhar aqui:
Como implementar um TokenProvider no ASP.NET Identity 1.1 nightly build?
para usar a implementação do provedor de token padrão do pacote Microsoft.Identity.Owin
fonte
em IdentityConfig.cs, adicione sua opção de dois fatores:
fonte