Na versão atual
Supondo que você tenha feito a verificação da solicitação para redefinir a senha esquecida, use o código a seguir como etapas de código de amostra.
ApplicationDbContext =new ApplicationDbContext()
String userId = "<YourLogicAssignsRequestedUserId>";
String newPassword = "<PasswordAsTypedByUser>";
ApplicationUser cUser = UserManager.FindById(userId);
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();
store.SetPasswordHashAsync(cUser, hashedNewPassword);
No AspNet Nightly Build
A estrutura é atualizada para funcionar com Token para lidar com solicitações como ForgetPassword. Uma vez no lançamento, espera-se uma orientação de código simples.
Atualizar:
Esta atualização é apenas para fornecer etapas mais claras.
ApplicationDbContext context = new ApplicationDbContext();
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context);
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
String userId = User.Identity.GetUserId();//"<YourLogicAssignsRequestedUserId>";
String newPassword = "test@123"; //"<PasswordAsTypedByUser>";
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
ApplicationUser cUser = await store.FindByIdAsync(userId);
await store.SetPasswordHashAsync(cUser, hashedNewPassword);
await store.UpdateAsync(cUser);
Se você deseja alterar uma senha usando o UserManager, mas não deseja fornecer a senha atual do usuário, pode gerar um token de redefinição de senha e usá-lo imediatamente.
fonte
SecurityStamp
para o seu usuário não seja nulo. Isso pode acontecer para usuários migrados de outros bancos de dados ou usuários que não foram criados por meio doUserManager.CreateAsync()
método.Descontinuada
Esta foi a resposta original. Funciona, mas tem um problema. E se
AddPassword
falhar? O usuário fica sem senha.A resposta original: podemos usar três linhas de código:
Consulte também: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx
Agora recomendado
Provavelmente é melhor usar a resposta que EdwardBrey propôs e DanielWright posteriormente elaborado com um exemplo de código.
fonte
No seu
UserManager
, primeiro chame GeneratePasswordResetTokenAsync . Depois que o usuário verificar sua identidade (por exemplo, recebendo o token em um e-mail), passe o token para ResetPasswordAsync .fonte
ResetPasswordAsync
obter um ID de usuário é que o provedor de identidade só precisa indexar IDs de usuário, não também tokens. Isso permite uma melhor escalabilidade se houver muitos usuários.Este snippet de código foi retirado do projeto AspNetIdentitySample disponível no github
fonte
Método de criação em
UserManager<TUser, TKey>
fonte
Em caso de redefinição de senha, recomenda-se redefini-la enviando um token de redefinição de senha para o e-mail do usuário cadastrado e solicitar ao usuário a nova senha. Se você criou uma biblioteca .NET facilmente utilizável sobre a estrutura de identidade com os ajustes de configuração padrão. Você pode encontrar detalhes no link do blog e o código-fonte no github.
fonte
Acho que o guia da Microsoft para identidade do ASP.NET é um bom começo.
https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
Nota:
Se você não usa AccountController e não deseja redefinir sua senha, use
Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
. Se você não tem o mesmo OwinContext, você precisa criar um novoDataProtectorTokenProvider
como o queOwinContext
usa. Por padrão, olhe paraApp_Start -> IdentityConfig.cs
. Deve ser parecido comnew DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
.Pode ser criado assim:
Sem Owin:
Com Owin:
O
DpapiDataProtectionProvider
eDataProtectorTokenProvider
precisa ser criado com o mesmo nome para que uma redefinição de senha funcione. Usando Owin para criar o token de redefinição de senha e, em seguida, criar um novoDpapiDataProtectionProvider
com outro nome não funcionará.Código que uso para identidade ASP.NET:
Web.Config:
AccountController.cs:
fonte
Eu fiz uma pequena investigação e a solução que funcionou para mim foi uma mistura de algumas soluções encontradas neste post.
Estou basicamente compilando essa solução e postando o que funciona para mim. No meu caso, não quero usar nenhum token do núcleo .net.
fonte
Melhor maneira de redefinir a senha no uso de identidade do núcleo Asp.Net para Web API.
Nota * : Erro () e Resultado () são criados para uso interno. Você pode voltar que quiser.
fonte