经过大量搜索和尝试,我终于想出了如何让人们在我的网站上注册和登录(并赋予他们角色等并进行授权)。我继承自ExtendedMembershipProvider和RoleProvider类,将它们都设为自定义类,但现在我仍然无法让Oauth正常工作(主要是OpenID)。我在AuthConfig中注册了GoogleClient,但是一旦我尝试登录,它就出现了(在AccountController.cs中):if(OAuthWebSecurity.Login(result.Provider,result.ProviderUserId,createPersistentCookie:false)
当我实现RoleProvider类并调用Roles.IsUserInRole(stringusername,stringroleName)时,代码执行首先转到方法“GetRolesForUser(stringusername)”。为什么是这样?当我只是在寻找该用户是否属于一个角色的单一值时,我不想迭代所有角色。这是.NET的角色提供程序类的限制,还是我可以做些什么来更多地控制代码的执行?调用代码如下if(Roles.IsUserInRole(CurrentUser.UserName,"Teacher")){这是IsUserInRole的实现publicoverrideboolIsUse
在带有HttpContext的ASP.NET页面、模块或处理程序中时目前,我如何获得对当前RoleProvider的引用实例?它是在IPrincipal.IsInRole(..)时用于授权的提供程序方法被调用。默认情况下,或者根据配置,我的提供者似乎是SqlRoleProvider例如,当我运行应用程序时出现错误。我想在运行时检查提供程序的类型,以提供有关实际使用的提供程序的反馈。 最佳答案 staticRolesclass有一个Provider属性,您可以使用它来引用当前的提供者。Roles.Provider如果您使用的是自定义R