更改ASP.NET Identity存储用户数据的数据库。

12 浏览
0 Comments

更改ASP.NET Identity存储用户数据的数据库。

我们按照以下步骤创建了一个新的ASP.NET 4.5.1项目:

  • Visual Studio 2013
  • 新建项目
  • Visual C#
  • Web
  • ASP.NET Web应用程序
  • Web API
  • 更改身份验证
  • 个人用户账户
  • 确定 > 确定

在解决方案资源管理器中的App_Start > Startup.Auth.cs文件中,有以下代码用于配置ASP.NET Identity。我们如何更改UserManager存储用户数据的数据库?

static Startup()
{
    PublicClientId = "self";
    UserManagerFactory = () => new UserManager(new UserStore());
    OAuthOptions = new OAuthAuthorizationServerOptions
    {
        TokenEndpointPath = new PathString("/Token"),
        Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
        AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
        AllowInsecureHttp = true
    };
}

0
0 Comments

ASP.NET Identity是一个用于处理用户认证和授权的框架。在ASP.NET Identity中,用户数据默认存储在数据库中。然而,有时候我们可能需要更改默认的数据库,这就涉及到了一个问题:如何更改ASP.NET Identity存储用户数据的数据库?

要解决这个问题,我们可以通过以下两种方法之一来更改数据库:

1.将自定义的DbContext传递给UserStore的构造函数。代码如下所示:

// 这是一个工厂模式的实现方式
UserManagerFactory = () => new UserManager(new UserStore(new MyDbContext()));

2.更改Web.config中名为DefaultConnection的连接字符串。代码如下所示:


  

在上述代码中,我们可以看到以下细节:

- UserStore类提供了一个非常基本的用户管理API。我们可以配置它将用户数据存储为IdentityUser类型,并且存储在MyDbContext数据存储中。

- UserManager类提供了一个更高级别的用户管理API,它会自动保存对UserStore的更改。我们可以配置UserManager使用我们刚刚创建的UserStore

- UserManagerFactory应该实现工厂模式,以便为应用程序的每个请求获取一个UserManager实例。否则,将会抛出以下异常:

The context cannot be used while the model is being created. This exception may be thrown if the context is used inside the OnModelCreating method or if the same context instance is accessed by multiple threads concurrently. Note that instance members of DbContext and related classes are not guaranteed to be thread safe.

通过以上方法,我们可以解决ASP.NET Identity更改存储用户数据的数据库的问题。

0
0 Comments

问题的原因是想要更改ASP.NET Identity存储用户数据的数据库。解决方法是通过在上下文中传递连接字符串的名称来更改数据库。可以使用IdentityDbContext类来创建自定义的上下文,并在构造函数中传递连接字符串的名称。另外,可以通过继承IdentityDbContext类来获得ASP.NET Identity提供的功能。以下是解决方法的具体代码示例:

public class MyDbContext : IdentityDbContext
{
  public MyDbContext()
    : base("TheNameOfTheConnectionString")
  {
  }
}

通过继承IdentityDbContext类,可以获得用户和角色管理的功能。更多关于IdentityDbContext的信息可以参考[这个线程](http://stackoverflow.com/questions/19902756)。如果以上方法无效,可以参考[这个问题](http://stackoverflow.com/questions/21393195)寻求更多帮助。

0