标签: sqlmembershipprovider

大多数人使用.NET的SqlMembershipProvider,SqlRoleProvider和SqlProfileProvider吗?

在开发具有成员资格功能的站点时,大多数人是否使用.NET的SqlMembershipProvider,SqlRoleProvider和SqlProfileProvider?

或者许多人完全建立自己的提供者,甚至自己的会员制度?

SQL提供程序的哪些限制会让您自己推出?

是否可以轻松扩展SQL提供程序以提供其他功能?

对于Reference
Per Scott Gu的博客,Microsoft提供了SqlMembershipProvider的源代码,以便您可以自定义它,而不是从头开始.只是一个FYI.

c# asp.net sqlmembershipprovider sqlroleprovider sqlprofileprovider

8
推荐指数
1
解决办法
5025
查看次数

将MembershipProvider注入ASP.Net MVC AccountController

Asp.Net MVC 1.0项目模板包含一个AccountController类,它支持构造函数注入:

public AccountController(IFormsAuthentication formsAuth, 
    IMembershipService service)
{
    FormsAuth = formsAuth ?? new FormsAuthenticationService();
    MembershipService = service ?? new AccountMembershipService();
}
Run Code Online (Sandbox Code Playgroud)

一个AccountMembershipService类也包括在内,而且它也支持构造器注入:

public AccountMembershipService(MembershipProvider provider)
{
    _provider = provider ?? Membership.Provider;
}
Run Code Online (Sandbox Code Playgroud)

我相信你们中的许多人已经将这些用于单元测试,但我的目标是使用Windsor 注入一个SqlMembershipProvider,因此使用Windsor xml文件而不是web.config在运行时配置它.换句话说,我想实际使用AccountMembershipService类的构造函数注入,我想继续使用内置的ASP.Net 2.0 Membership系统.我只想让会员系统的配置通过Windsor IoC.

如果没有编写我自己的MembershipProvider,或者SqlMembershipProvider不能很好地与IoC一起使用,这是否可行?

来自MSDN:"ASP.NET调用SqlMembershipProvider构造函数来创建应用程序配置中指定的SqlMembershipProvider类的实例.此构造函数不应在您的代码中使用."

我相信菲尔提出了一个非常相似的问题,但我没有足够的经验来解决他收到的答案.

谢谢你的帮助.


更新: 为了清楚起见,我通过DI提供应用程序的MembershipProvider的原因是支持多个租户.每个租户都有一个带有ASP成员资格表的独立数据库.DI允许我在运行时切换连接字符串,从而使核心应用程序不知道每个租户使用哪个数据库.Windsor正在控制DI,它"知道"哪个租户通过url发出请求:
var url = HttpContext.Current.Request.ServerVariables["HTTP_HOST"]

Mike Hadlow 在这里讨论这种技术. 我只是想将SqlMembershipProvider集成到他对这个IoC设计的使用中.

再次感谢.

asp.net-mvc dependency-injection castle-windsor asp.net-membership sqlmembershipprovider

7
推荐指数
1
解决办法
4648
查看次数

更改成员连接字符串

我是asp.net会员新手,我需要帮助以编程方式更改其连接字符串.

我到现在为止尝试的是

我已经创建了一个类项目名称Sample作为名称空间**并扩展了 System.Web.Security.SqlMembershipProvider

代码为

namespace Sample
{
    public class Connectionstring : SqlMembershipProvider
    {
        public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
        {
            string connectionString = "server=xx.xx.xx;database=db;user id=un;password=pwd";    

           // Set private property of Membership provider.  
           FieldInfo connectionStringField = GetType().BaseType
                     .GetField("_sqlConnectionString", BindingFlags.Instance |
                                                       BindingFlags.NonPublic);
           connectionStringField.SetValue(this, connectionString);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并将成员标记中的Web配置文件更改为

<membership defaultProvider="SQLMembershipProvider">
  <providers>
    <add name="SQLMembershipProvider" type="sample.Connectionstring,sample" connectionStringName="SQLMembershipConnString" applicationName="@@@@@@@" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" />
  </providers>
</membership>
Run Code Online (Sandbox Code Playgroud)

并且在运行Web应用程序项目时,我正在更改的连接字符串不会被更改?

等待您的宝贵回复和评论

.net c# connection-string sqlmembershipprovider

7
推荐指数
1
解决办法
4767
查看次数

MVC4 SimpleMemberhip'提供商遇到了未知错误.'

我正在尝试使用SQL Azure数据库将SimpleMembership与MVC4一起使用.

我得到一个例外

The Provider encountered an unknown error.
Run Code Online (Sandbox Code Playgroud)

没有内部异常,在这行代码上:

WebSecurity.CreateAccount("test@test.com", "23iu$9835", false);
Run Code Online (Sandbox Code Playgroud)

我的控制器上有这个过滤器

[InitializeSimpleMembership]
Run Code Online (Sandbox Code Playgroud)

其中包含此InitializeDatabaseConnection

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "User", "Id", "Email", autoCreateTables: false);
Run Code Online (Sandbox Code Playgroud)

我已经仔细检查了我的连接字符串,它似乎工作正常.

由于异常没有提供有用的信息,因此我很难调试此问题.有没有人有任何想法,为什么我可能有这个问题,或指出我正在开始调试问题的正确方向?

编辑:这是完整的堆栈跟踪:

[MembershipCreateUserException: The Provider encountered an unknown error.]
   WebMatrix.WebData.SimpleMembershipProvider.CreateAccount(String userName, String password, Boolean requireConfirmationToken) +514
   WebMatrix.WebData.WebSecurity.CreateAccount(String userName, String password, Boolean requireConfirmationToken) +75
   Nexus.Areas._Internal.Controllers.HomeController.Index() in c:\54Projects\Nexus\Nexus\Areas\_Internal\Controllers\HomeController.cs:38
   lambda_method(Closure , ControllerBase , Object[] ) +101
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +59
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +435
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +60
   System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +50 …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-membership sqlmembershipprovider asp.net-mvc-4 simplemembership

7
推荐指数
1
解决办法
2747
查看次数

SqlMembershipProvider Membership.GetUser名称失败

这个问题 ,如果我使用GUID Membership.GetUser工作正常,但如果我尝试不带参数或名称失败:

//This works and adds records to aspnet_user & aspnet_Membership tables
MembershipUser membershipUser = Membership.CreateUser(_name, _pwd, _email, null, null, true, null, out createStatus); 

//These fail with an InvalidCastException
MembershipUser membershipUser2 = Membership.GetUser(_name, true);
MembershipUser membershipUser3 = Membership.GetUser();

//If I go look up the GUID for this user (userId), this works!
MembershipUser membershipUser4 = Membership.GetUser(new Guid("E1428CD3-CF17-494E-AB77-CF8F6010F585"), true);
Run Code Online (Sandbox Code Playgroud)

其他之谜

//This works
Int32 count = Membership.GetNumberOfUsersOnline();    

//this fails (but totalRecords has the right value)
Int32 totalRecords;
MembershipUserCollection col = Membership.GetAllUsers(0,100, out …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc exception-handling sqlmembershipprovider

6
推荐指数
1
解决办法
2391
查看次数

使用Database First将ASP.NET SQL成员身份迁移到ASP.NET身份

我有一个旧的ASP.NET应用程序,它使用SQL Membership并使用aspnet_ tables来管理登录,密码和角色等.

我想使用MVC 5重写应用程序,但它使用ASP.NET身份,我还没有找到一种使用新身份验证方法迁移到它的简单方法.

我尝试了http://www.asp.net/identity/overview/migrations/migrating-an-existing-website-from-sql-membership-to-aspnet-identity, 但这似乎并不起作用尽管全部SQL脚本执行得很好.

在尝试创建一个全新的ASP.NET MVC 5应用程序时,我无法将其绑定到我当前的数据库中.我尝试将DB Context连接字符串设置为我的实体框架连接字符串,但它不喜欢这样.

有没有人有经验将旧的.NET应用程序迁移到MVC 5并保留用户数据库?

asp.net migration asp.net-mvc identity sqlmembershipprovider

6
推荐指数
1
解决办法
2750
查看次数

是否有开源的Asp.net会员管理GUI(如netwebadmin,但在线工作)?

Visual Studio 2005附带了一个项目,允许您使用asp.net成员资格提供程序来查找,添加,编辑和删除用户和角色.不幸的是,它无法在线使用,并且为了在您的站点中拥有管理区域,您似乎必须编写自己的管理界面.

是否有一个开源或免费项目具有netwebadmin的功能,但可以在线使用?

asp.net sqlmembershipprovider

5
推荐指数
1
解决办法
3484
查看次数

SQL创建.Net Membership Provider用户

我有一个SQL脚本,可以在我的数据库中创建用户.它使用.Net成员资格存储过程.

此时它工作正常.

唯一的问题是密码保存为明文.我应该在这里更改为他们是盐渍/加密的(不知道在这里使用什么术语)

GO

DECLARE @return_value int,
  @UserId uniqueidentifier


EXEC @return_value = [dbo].[aspnet_Membership_CreateUser]
  @ApplicationName = N'Theater',
  @UserName = N'sam.sosa',
  @Password = N'mypassword',
  @PasswordSalt = N'eyhKDP858wdrYHbBmFoQ6DXzFE1FB+RDP4ULrpoZXt6f',
  @Email = N'sam@Simple.com',
  @PasswordQuestion = N'Whats your favorite color',
  @PasswordAnswer = N'Fusia',
  @IsApproved = 1,
  @CurrentTimeUtc = '2010-03-03',
  @CreateDate = '2010-03-03',
  @UniqueEmail = 1,
  @PasswordFormat = 0,
  @UserId = @UserId OUTPUT

SELECT @UserId as N'@UserId'

SELECT 'Return Value' = @return_value

GO
Run Code Online (Sandbox Code Playgroud)

谢谢!

asp.net-membership sqlmembershipprovider membership-provider

5
推荐指数
1
解决办法
6001
查看次数

aspnetdb.mdf来自我的ASP.NET MVC应用程序在哪里?

我是ASP.NET的新手,刚刚开始学习ASP.NET MVC 3.我使用默认模板启动了一个新的ASP.NET MVC 3项目,该模板已经配置了大部分成员资格.现在我正试图了解幕后的真实情况.

我发现默认模板定义了一个IMembershipService接口,该接口由AccountMembershipService类实现,它基本上只包装System.Web.Security.MembershipProvider.从代码中的注释听起来像这样的抽象是为了便于单元测试.

默认的MembershipProvider在Web.config文件中设置.我的项目是从默认模板创建的,它被设置为SqlMembershipProvider.

<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" />
  </providers>
</membership>
Run Code Online (Sandbox Code Playgroud)

它引用Web.config文件中的连接字符串,该文件引用SQL Express数据库"aspnetdb.mdf".

  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

当我第一次创建项目时,没有aspnet.mdf文件.但在运行我的应用程序并注册新用户后,此文件自动生成表格和所有.这里发生了什么?是什么创建了这个文件并指定了应该创建的表?

sqlmembershipprovider sql-server-express asp.net-mvc-3

5
推荐指数
1
解决办法
1万
查看次数

多个独立数据库事务的并发问题?

您将如何使用以下代码解决并发问题?在此示例中,我们想知道用户验证失败的原因.问题是这段代码对数据库进行了两次单独的调用,但我们希望整个方法在概念事务中发生.具体来说,我们对隔离感兴趣.在确定身份验证失败的原因之前,我们不希望在执行此方法期间并发写入会影响我们的读取.

我想到了一些解决方案:Thread Locking,TransactionScopeOptimistic Locking.我非常喜欢乐观锁定的想法,因为我认为冲突可能很少见,但是.NET没有内置任何东西,对吧?

此外 - 在这种情况下,这真的是值得关注的吗?什么时候这样的并发问题很重要,什么时候不重要?在实施解决方案时需要考虑什么?性能?锁的持续时间?冲突发生的可能性有多大?

编辑:在回顾Aristos的回答之后,我认为我真正追求的是Authenticate方法的某种" 快照 "隔离级别.

public MembershipStatus Authenticate(string username, string password)
    {
        MembershipUser user = Membership.GetUser(username);
        if (user == null)
        {
            // user did not exist as of Membership.GetUser
            return MembershipStatus.InvalidUsername;
        }

        if (user.IsLockedOut)
        {
            // user was locked out as of Membership.GetUser
            return MembershipStatus.AccountLockedOut;
        }

        if (Membership.ValidateUser(username, password))
        {
            // user was valid as of Membership.ValidateUser
            return MembershipStatus.Valid;
        }

        // user was …
Run Code Online (Sandbox Code Playgroud)

c# database asp.net concurrency sqlmembershipprovider

5
推荐指数
1
解决办法
642
查看次数