.net – 实现UserManager以使用自定义类和存储过程
我的应用程序的所有身份验证和授权过程都是使用存储过程完成的.我写了一个包含我需要的所有功能的课程,例如GetUsers,Login,AddRole,AddMember等
此外,管理用户和角色和权限的管理页面也是使用此类完成的. 我只需要添加身份验证(我的意思是授权属性),用于登录和注销的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; } } 解决方法
正如
alisabzevari建议您必须实施
IUserStore.
您甚至不依赖于定义的存储和表结构. 您可以自定义存储层的每个位. 我做了一些实验并尝试使用不同的存储实现我自己的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); } 它将收到一个IUser,您必须在自定义存储中保留并返回它. 如果您查看我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的每个方法中插入断点,看看一切是如何组合在一起的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 第15章 扩展ASP.NET MVC
- asp.net-mvc – MVC 5 Web Api – 从基本控制器继承路由
- ASP.NET / IIS7 Url重写映射不起作用
- 使用.Net的Fluent验证库验证单个属性
- asp.net-mvc – 处理onchange事件在HTML.DropDownList Razo
- asp.net Mvc4 使用ajax结合分页插件实现无刷新分页
- 对于ASP.Net中的IIS管理哪个更好:WMI或ADSI或托管API?有什
- 如何在ASP.NET Core WebAPI中使用Newtonsoft:Json.NET?
- .net – 如何从ModelState键中删除前缀?
- asp.net – Lucene.Net是否管理访问相同索引的多个线程,一个
- asp.net-mvc – 在ASP.NET MVC视图中允许多少逻辑
- 身份验证 – 如何使用ASP.NET身份在Web API 2中实
- asp.net-mvc-3 – 无法加载文件或程序集’Micros
- asp.net-mvc – 同一页面上的ASP.NET MVC模型绑定
- asp.net-mvc – Razor视图引擎2.x中有什么新功能
- asp.net – MVC 4数据注释“显示”属性
- 如何创建自定义授权属性以检查Asp.Net Core中的角
- 新浪出输入法了,深蓝词库转换更新到1.3.1——增
- asp.net-mvc – ASP.NET MVC路由两个GUID
- asp.net – 从类型’DBNull’到类型’String’的