如何在ASP.NET Identity 1.1中每晚构建一个TokenProvider?
我正在尝试使用ASP.NET Identity 1.1的每晚构建实现密码重置function。 有一个UserManager.GetPasswordResetToken方法,但它会抛出exception“没有注册ITokenProvider”。 ASP.NET身份中是否有内置的令牌提供程序? 如果是,我如何注册? 如果不是,我该如何实施呢? 将是1.1中的默认令牌提供程序。 发布? 最后一个问题,是否有估计的1.1发布日期?
可以在Microsoft.Identity.Owin
包中找到默认令牌提供程序实现:
/// /// Token provider that uses a DataProtector to generate encrypted tokens /// public class DataProtectorTokenProvider : ITokenProvider { public DataProtectorTokenProvider(IDataProtector protector)
你可以使用OWIN IAppBuilder
的默认数据保护提供程序连接一个这样的东西
IDataProtectionProvider provider = app.GetDataProtectionProvider(); if (provider != null) { manager.PasswordResetTokens = new DataProtectorTokenProvider(provider.Create("PasswordReset")); manager.UserConfirmationTokens = new DataProtectorTokenProvider(provider.Create("ConfirmUser")); }
如果有人在AspNet.Identity 2.0 beta1版本下寻找解决方案。
只有这一点需要修改。
UserManager.UserTokenProvider = new DataProtectorTokenProvider (provider.Create("UserToken")) as IUserTokenProvider;
PasswordResetTokens
和UserConfirmationTokens
合并到UserTokenProvider
属性中,并且还修改了令牌提供程序类。
另一种方法(基于其他答案,但简化一些)是改变Startup.Auth.cs
所以它看起来像这样:
public partial class Startup { internal static IDataProtectionProvider DataProtectionProvider { get; private set; } public void ConfigureAuth(IAppBuilder app) { DataProtectionProvider = app.GetDataProtectionProvider(); } }
然后,修改AccountController.cs
的默认构造函数,使其看起来类似于:
public AccountController() : this(new UserManager(new UserStore (new ApplicationDbContext()))) { if (Startup.DataProtectionProvider != null) { this.UserManager.PasswordResetTokens = new DataProtectorTokenProvider(Startup.DataProtectionProvider.Create("PasswordReset")); this.UserManager.UserConfirmationTokens = new DataProtectorTokenProvider(Startup.DataProtectionProvider.Create("ConfirmUser")); } }
好的,根据@ hao-kung的回复回答我自己的问题。 首先将静态构造函数和UserManagerFactory添加到Statrup类(startup.auth.cs)
public partial class Startup { static Startup() { UserManagerFactory = () => new UserManager(new UserStore ()); } public static Func> UserManagerFactory { get; set; } public void ConfigureAuth(IAppBuilder app) { var manager = UserManagerFactory(); IDataProtectionProvider provider = app.GetDataProtectionProvider(); if (provider != null) { manager.PasswordResetTokens = new DataProtectorTokenProvider(provider.Create("PasswordReset")); manager.UserConfirmationTokens = new DataProtectorTokenProvider(provider.Create("ConfirmUser")); } app.UseCookieAuthentication(new CookieAuthenticationOptions()); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); } }
然后使用该UserManagerFactory在AccountController中初始化UserManager
上述就是C#学习教程:如何在ASP.NET Identity 1.1中每晚构建一个TokenProvider?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public AccountController() : this(Startup.UserManagerFactory()) { } public AccountController(UserManager userManager) { UserManager = userManager; } public UserManager UserManager { get; private set; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1030884.html