【问题标题】:WEB API 2 Identity - work with exisiting databaseWEB API 2 Identity - 使用现有数据库
【发布时间】:2015-01-25 23:34:20
【问题描述】:

我正在尝试将 web api 2 与基于令牌的身份验证一起使用。但我想使用我自己的数据库。用户已创建。我已经重命名了 OnModelCreating 中的表, 所以我有正确的表名,如用户、UserRole 而不是 Asp.netUsers 等。我更改了 ApplicationDbContext 的连接字符串以连接到我的数据库。

所以当我通过 web api 注册新用户时,它会在表格中正确创建用户,并且没问题。但是当我尝试创建一个新的不记名令牌并尝试如下查找用户时,它总是返回 null。 不知道为什么。我所有的配置都是默认的,所以我无法理解。当我尝试搜索用户时,我总是在下面得到空值。 var user = await userManager.FindAsync(context.UserName, context.Password);

我是否需要做一些特别的事情才能使 web api 2 身份验证与我现有的数据库一起工作?

【问题讨论】:

  • 您可以尝试跟踪在身份验证期间执行的 SQL 查询。也许它会提供一些细节。至于我的问题可能在于密码哈希机制,但这只是一个猜测
  • 我检查了一个用户的分析器 - 我看到几个查询,其中一个(183 行文本:-))返回用户数据。之后,我不再朝这个方向移动。如果情况不清楚,可能稍后我会这样做

标签: c# asp.net asp.net-web-api asp.net-web-api2


【解决方案1】:

我解决了这个问题。我还不是很清楚,但现在它工作正常。为什么会出现问题:当我更改连接字符串的 ApplicationDbContext 构造函数时,我第一次做错了, 因为启动时出错(Unknow distribution Ado.net providerName),所以我读入参数ApplicationDbContext真实连接字符串(“Data Source=xxx.xxx.xxx.xxx; Initial Catalog=NameDB;...... )。

public ApplicationDbContext()
            : base("Data Source=xxx.xxx.xxx.xxx; Initial Catalog=NameDB; .........")
        {
        }

编译没问题,但是上面有问题。 之后,我阅读了构造函数的正确文本(参数 - 来自 Web.config 的名称连接字符串 - “MyConnection”),

public ApplicationDbContext()
            : base("MyConnection")
        {
        }

并删除此连接字符串的标记 providerName="System.Data.SqlClient"。是错误“需要 providerName ...”,我返回了这个标签。之后启动正常,应用程序正常工作,我怎么看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2023-04-08
    • 2018-04-21
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多