大佬教程收集整理的这篇文章主要介绍了.net – 实现UserManager以使用自定义类和存储过程,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我只需要添加身份验证(我的意思是授权属性),用于登录和注销的cookie以及为每个登录存储一些服务器端数据.我想我需要为此实现身份?
在这种情况下,你能指导我实施吗?您需要做的最基本的事情是实现一个将IUserStore实例传递给构造函数的create方法.但我不需要为用户或角色提供任何表,我该如何实现此方法?
这是当前的类,如果您需要查看使用存储过程的自定义身份验证类,请告诉我.
public class AppUseRMANager : UseRMANager<AppUser> { public AppUseRMANager(IUserStore<AppUser> storE) : base(storE) { } public static AppUseRMANager Create(IdentityFactoryOptions<AppUseRMANager> options,IOwinContext context) { //AppUseRMANager manager = new AppUseRMANager(); //return manager; return null; } }
我做了一些实验并尝试使用不同的存储实现我自己的UseRMANager和RoleManager,例如Biggy:
你可以在GitHub上找到代码here.
首先要做的是实现您的UseRMANager,您可以在其中配置密码验证的要求:
public class AppUseRMANager : UseRMANager<AppUser,int> { public AppUseRMANager (IUserStore<AppUser,int> storE): base(storE) { thiS.UserLockoutEnabledByDefault = false; // this.DefaultAccountLockoutTimeSpan = TimeSpan.Fromminutes(10); // this.MaxFailedAccessAttemptsBeforeLockout = 10; thiS.UserValidator = new UserValidator<User,int>(this) { AllowOnlyAlphanumericUserNames = false,requireUniqueEmail = false }; // Configure validation logic for passwords this.passwordValidator = new passwordValidator { requiredLength = 4,requireNonLetterOrDigit = false,requireDigit = false,requireLowercase = false,requireUppercase = false,}; } }
然后定义您的IUserStore implementation.您必须实现的主要方法是CreateAsync:
public System.Threading.Tasks.Task CreateAsync(User user) { // Saves the user in your storage. return Task.FromResult(user); }
如果您查看我implemented的代码,您可以看到我使用了一些接口IUserRoleStore,IUserpasswordStore,IUserClaimStore等,因为我需要使用角色和声明.
我还实现了我的own SignInManager.
一旦定义了所有实现,就可以在startup引导所有内容:
app.CreatePerOwinContext<Custom.Identity.UseRMANager>(() => new Custom.Identity.UseRMANager(new Custom.Identity.UserStore(folderStoragE))); app.CreatePerOwinContext<Custom.Identity.RoleManager>(() => new Custom.Identity.RoleManager(new Custom.Identity.RoleStore(folderStoragE))); app.CreatePerOwinContext<Custom.Identity.SignInservice>((options,context) => new Custom.Identity.SignInservice(context.GetUseRMANager<Custom.Identity.UseRMANager>(),context.Authentication));
您可以查看我尝试验证用户的AccountController:
var result = await SignInManager.passwordSignInAsync(model.Email,model.password,model.RememberMe,shouldLockout: falsE); switch (result) { case SignInStatus.success: return RedirectToLocal(returnUrl); case SignInStatus.LockedOut: return View("Lockout"); case SignInStatus.requiresVerification: return RedirectToAction("SendCode",new { ReturnUrl = returnUrl,RememberMe = model.RememberMe }); case SignInStatus.Failure: default: ModelState.AddModelError("","Invalid login attempt."); return View(model); }
调用passwordSignInAsync后,您会注意到将调用UseRMANager的一些方法.第一个是FindByNameAsync:
public System.Threading.Tasks.Task<User> FindByNameAsync(String userName) { //Fetch your user using the username. return Task.FromResult(user); }
我猜你必须实现你的存储过程,你将从数据库中获取用户.
然后另一个方法FindByIdAsync将是called:
public System.Threading.Tasks.Task<User> FindByIdAsync(int userId) { // Fetch - again - your user from the DB with the Id. return Task.FromResult(user); }
您必须再次使用存储过程通过他/她的ID查找您的用户.
如果你从github下载我的项目并玩它,你会发现大多数这些方法将被多次调用.不要害怕.它就是这样儿的.
我建议你在UserStore的每个方法中插入断点,看看一切是如何组合在一起的.
以上是大佬教程为你收集整理的.net – 实现UserManager以使用自定义类和存储过程全部内容,希望文章能够帮你解决.net – 实现UserManager以使用自定义类和存储过程所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。