无法连接到数据库来执行身份功能

2024-04-11

我使用 ASP.NET MVC5 创建了一个新应用程序,使用个人用户帐户来确保安全性,并使用代码优先迁移来进行模型/数据库建模。所有选项均为默认。

我想为其设置自定义用户和角色,所以我使用创建了一个种子RoleManager and UserManager只是为了填充数据库。它工作正常,创建 3 个用户、3 个角色并正确设置每个用户的角色。

我可以正确登录应用程序。问题是我无法使用以下方法执行任何 Identity 方法User,这是登录的用户,我唯一能得到的是User.Identity.IsAuthenticated值,以及User.Identity.Name,这是正确的。其他所有方法都像Roles.GetRolesForUser("John"), or User.IsInRole("Student"),总是生成此异常:

ProviderException:角色管理器功能尚未启用。

好吧,就像在本文 https://stackoverflow.com/questions/3874279/the-role-manager-feature-has-not-been-enabled,我设法插入了<roleManager enabled="true" />在 Web.config 中,现在需要一个真的很长时间才回复,并生成如下异常:

参考:

Roles.IsUserInRole("Student")

生成:

HttpException

参考:

Roles.GetRolesForUser(User.Identity.Name)

生成:

NullReferenceException

使用登录的学生角色用户访问“关于”页面:

[Authorize(Roles="Teacher")]
public ActionResult About()
{
    ViewBag.Message = "Your application description page.";

    return View();
}

生成:

SqlException
HttpException

就像我根本没有连接到数据库,这是自动生成的 LocalDB,我可以填充种子方法,甚至登录到应用程序。

我什至可以从 AspNetUsers 表加载数据并使用下面的代码在视图中显示它:

using (Models.ApplicationDbContext db = new Models.ApplicationDbContext())
{
    List<Models.ApplicationUser> Users = db.Users.ToList();

    ViewBag.Users = Users;
}

return View();

请帮忙 :'(


这是种子代码,工作正常,因此它可以使用身份引擎连接到数据库。

protected override void Seed(LocalBDAuthTest.Models.ApplicationDbContext context)
{
    #region Create Roles Student, Teacher e Administrator

    var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

    // Student
    if (!RoleManager.RoleExists("Student"))
    {
        RoleManager.Create(new IdentityRole("Student"));
    }

    // Teacher
    if (!RoleManager.RoleExists("Teacher"))
    {
        RoleManager.Create(new IdentityRole("Teacher"));
    }

    // Administrator
    if (!RoleManager.RoleExists("Administrator"))
    {
        RoleManager.Create(new IdentityRole("Administrator"));
    }

    #endregion

    #region Create Users for Student, Teacher e Administrator Roles.

    var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));


    // Create a Student user and set it's role to Student
    if (!context.Users.Any(u => u.UserName == "John"))
    {
        var Student = new ApplicationUser() { UserName = "John" };
        var Result = UserManager.Create(Student, "123456");
    }
    if (!UserManager.FindByName("John").Roles.Any())
    {
        UserManager.AddToRole(UserManager.FindByName("John").Id, "Student");
    }


    // Create a Teacher user and set it's role to Teacher
    if (!context.Users.Any(u => u.UserName == "Arnold"))
    {
        var Teacher = new ApplicationUser() { UserName = "Arnold" };
        var Result = UserManager.Create(Teacher, "123456");
        UserManager.AddToRole(Teacher.Id, "Teacher");
    }
    if (!UserManager.FindByName("Arnold").Roles.Any())
    {
        UserManager.AddToRole(UserManager.FindByName("Arnold").Id, "Teacher");
    }


    // Create a Administrator user and set it's role to Administrator
    if (!context.Users.Any(u => u.UserName == "Caroline"))
    {
        var Administrator = new ApplicationUser() { UserName = "Caroline" };
        var Result = UserManager.Create(Administrator, "123456");
        UserManager.AddToRole(Administrator.Id, "Administrator");
    }
    if (!UserManager.FindByName("Caroline").Roles.Any())
    {
        UserManager.AddToRole(UserManager.FindByName("Caroline").Id, "Administrator");
    }

    #endregion
    }

这是因为混合了 ASP.NET Identity 和 ASP.NET Membership,并完成了以下操作:

<system.web>
    <roleManager enabled="true" />
</system.web>

您启用了会员资格SqlRoleProvider,它使用网站 \app_dir 文件夹中数据库中默认 SQL Express 实例中的角色存储。

如果你打开 machine.config,你会发现:

<connectionStrings>
  <add name="LocalSqlServer" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;
      AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient"/>
</connectionStrings>
.
.
.
<roleManager>
  <providers>
    <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" ...
</providers>
</roleManager>

您很可能没有安装 SQL Express,这就是您遇到超时和 SQL 异常的原因。

对于 ASP.NET Identity,请勿使用System.Web.Security.Roles(它是 ASP.NET 会员资格的一部分)但是使用Microsoft.AspNet.Identity.RoleManager反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法连接到数据库来执行身份功能 的相关文章

  • 需要帮助将 winform 迁移到 net 5

    我正在将 winform 应用程序从 net core 3 1 移植到 net 5 并收到以下错误 严重性代码 说明 项目文件行抑制状态 错误NETSDK1136 目标平台必须设置为Windows 通常 通过在 TargetFramewor
  • Active Directory B2C 身份验证以及在数据库中创建/存储用户 ID

    我正在制作一个移动应用程序 并希望使用 AD B2C 内容来处理用户的身份验证 我需要将它们的数据存储在 SQL DB 中 该数据库也位于 Azure 上 我打算让我的应用程序使用 REST 与我要编写的一些函数进行通信 然后与数据库后端进
  • JWT 中的注销不起作用

    我是 Laravel 的新手 我安装了 JWT 并登录 所以它工作并生成了一个令牌 当我在邮递员中注销时它返回 true 但一次又一次它返回 true 和 auth gt 用户 注销后始终返回用户 这是我的代码 public functio
  • 带 Expect 的 Telnet 自动化:身份验证速度慢?

    我正在使用 Telnet 向 Mikrotik 路由器发送命令 telnet 192 168 100 100 l admin Password pass1234 admin ZYMMA gt interface pppoe server r
  • Rails:RSpec - nil:NilClass 的未定义方法“cookie_jar”

    铁轨新手 尝试遵循迈克尔 哈特尔的教程 尝试添加辅助方法来模拟 RSpec 测试中的日志时陷入困境 describe when the a user has logged in and attempts to visit the page
  • yesod——密码保护临时站点

    我正在尝试设置 yesod 网络服务器的临时实例 我想知道是否有一些简单的方法可以使整个站点受到密码保护 具体来说 我希望能够提示那些导航到我的网站的人提供凭据 经过身份验证后 它应该像典型站点一样运行 但如果他们无法验证自己的身份 他们就
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • HTML5更改日期时间格式

    我在只读文本框 type text 中显示日期时间值 并且它呈现正确 但是当我尝试保存它时 HTML5 突出显示了文本框边框 我认为这意味着它未通过 HTML5 日期验证 是格式的原因吗 如果是的话怎么改格式 如果可能的话 另一个选项可能是
  • 在 AccountController 外部访问 UserManager

    我正在尝试设置一列的值aspnetuser来自不同控制器的表 不是accountcontroller 我一直在尝试访问UserManager但我不知道我们该怎么做 到目前为止 我已经在我想使用它的控制器中尝试了以下操作 Applicatio
  • 剃刀 2 到剃刀 3 MVC 5

    我一直在开发 MVC 4 解决方案 并且一直在尝试将其升级到 MVC 5 我已按照概述的步骤操作here http www asp net mvc tutorials mvc 5 how to upgrade an aspnet mvc 4
  • Ember 数据保存方法,创建与更新

    我不明白 Ember 如何确定是否应该更新或创建记录 我认为它是基于 ID 或商店条目 但它似乎是其他东西 代码示例阐明了 this returns the user without making an api call currentUs
  • 将某些项目从一个用户帐户移动到另一个用户帐户

    我要换工作公司 但我会继续从事同样的项目 我在 Azure DevOps 上有一些使用 Git 的项目 还有另一个使用 TFVC 的项目 我使用过这些集成在 Visual Studio 上的源代码控制工具 但从未使用过控制台命令 我想将源代
  • WebApi 2 和 MVC 5 使用不同的路由属性吗?

    通读this http blogs msdn com b webdev archive 2013 10 17 attribute routing in asp net mvc 5 aspx有关 ASP NET MVC 5 中的属性路由的博客
  • MVC 5 动态行与 BeginCollectionItem

    单击按钮时向表添加 删除行的最佳方法是什么 我需要从子类属性创建的行 子类是主类 模型中的列表 当前有一个视图 模型是 MyMain 它使用 RenderPartial 引用部分视图 分部视图显示模型的属性 一个名为 MyChild 的类
  • 在本地安全存储用于 Web 服务的密码

    我有一个应用程序 通过发送用户名和密码来对第三方 Web 服务进行身份验证 目前 我每次启动应用程序时都会在 winform 上输入密码 但我需要它自动登录 我想比更安全地存储用户名 密码 Dim username as String us
  • C# SMTP 身份验证失败,但凭据正确

    这是我的问题 我编写了以下程序来测试是否可以发送电子邮件 class Program static void Main string args try Console WriteLine Mail To MailAddress to new
  • Docker Hub API v2 令牌身份验证问题

    目前 我正在开发一个非常轻量级版本的 Docker 容器编排器 并且我必须能够从公共 Docker Hub 注册表获取图像摘要 我想使用 Docker Registry API v2 来实现此目的 我正在尝试使用以下 API 调用获取授权令
  • MYSQL 区分大小写的 utf8 搜索(使用 hibernate)

    我的登录表具有 utf8 字符集和 utf8 排序规则 当我想要检查用户名并检索该特定用户名的其他信息时 hql 查询会为我提供小写和大写相同的结果 我应该如何处理适用于案例的 HQL 查询 我使用 Mysql 5 和 java hiber
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p

随机推荐

  • 尝试在 webdriver.io 项目中打开 allure-reports 时出现异常 java.lang.UnsatisfiedLinkError

    我有一个小型 webdriver io 项目 只是为了第一次尝试它 我现在想添加诱惑报告 但是当我尝试运行时allure open我收到以下异常 但我不知道必须在哪里解决此问题 Starting web server 2021 05 04
  • Flutter 等效 Android-Toggle-Switch

    有任何像这样的扑动小部件吗这个图书馆 https github com BelkaLab Android Toggle Switch在 android java 中
  • XIB 文件在 XCode 中像 XML 一样打开,但使用 Interface Builder 可以正确打开

    当我在 Xcode 4 中双击 StartWindow xib 文件时 它不会在集成 Interface Builder 中打开 它像 XML 文件一样打开 我可以打开所有其他 xib 文件 它们会按预期显示 我可以通过 打开方式 使用旧的
  • Cython 优化

    我正在用 Python 编写一个相当大的模拟 并希望从 Cython 获得一些额外的性能 然而 对于下面的代码 我似乎没有得到那么多 即使它包含一个相当大的循环 大约 10 万次迭代 我是否犯了一些初学者错误 或者这个循环大小是否太小而无法
  • 尝试使用 Phantom.js 生成 PDF 时 Vue.js 未渲染

    在这个带有硬编码 url 的简单示例中 我的 Vue js 组件未渲染 纯 html 被渲染 但我有组件的所有位置都显示为空白 Phantomjs 应该能与 Vue js 正常工作吗 var webPage require webpage
  • 构建 Java Swing GUI 的最佳方法?

    到目前为止 我一直在使用 Netbeans Swing GUI 生成功能为我的 java 应用程序构建 GUI 现在我已经开始在我的项目中使用 Eclipse 并放弃了 Netbeans 那么除了手动编写 GUI 的所有代码之外 还有什么其
  • ios UICollectionView 单元格之间顶部/底部分离

    我有一个集合视图 工作正常 并且我调整了 X 填充的分离 而且效果很好 但对于单元格之间的 Y 填充 似乎没有调整为无分离 这是我的布局代码 UICollectionViewFlowLayout layoutItem UICollectio
  • 如何使用 slf4j 记录 postgres 驱动程序消息?

    我在我的网络应用程序中使用 postgres db 我在我的中添加了以下依赖项pom xml
  • AS3 - 我可以知道一个类是否实现了一个接口(或者是另一个类的子类)?

    有了这个代码 function someFunction classParam Class Boolean how to know if classParam implements some interface 即比较classParam
  • .NET 系统类型到 SqlDbType

    我一直在寻找 Net System Type 和 SqlDbType 之间的智能转换 我发现这是以下想法 private static SqlDbType TypeToSqlDbType Type t String name t Name
  • 如何生成与 java TimeZone 对应的良好时区下拉列表

    其他网络应用程序使用什么策略来生成格式良好的时区列表以满足用户偏好 我尝试获取所有时区 但列表很长 而且格式不适合用户 只是想知道其他人是如何做到这一点的 下面的代码片段 String ids TimeZone getAvailableID
  • 如何访问包含特殊字符的对象属性?

    我有一个formDOM 元素 var virDom document getElementsByTagName form 0 virDom有两个带 ID 的字段creditId and pwdId 我可以访问virDom creditId没
  • 表与临时表性能

    对于数百万条记录 哪个更快 永久表or临时表 我只需要将它用于 1500 万条记录 处理完成后 我们删除这些记录 在您的情况下 我们使用称为临时表的永久表 这是大量导入的常用方法 事实上 我们通常使用两个暂存表 一张包含原始数据 一张包含清
  • 如何获取用javascript加载的标签值

    我有一个这样的链接 它是从 Instagram api 获取的 http localhost 60785 access token aspx access token 43667613 4a1ee8c 791949d8f78b472d813
  • glBufferData() 的分段错误

    我不明白为什么这段代码会出现段错误 AxesMarker AxesMarker float size size size vbo vertices 0 vbo elements 0 Vertex vertices 6 Vertex Colo
  • 严格模式性能更高吗?

    一般来说 在浏览器中以 严格模式 执行 JavaScript 是否会提高性能 主流浏览器是否会进行额外的优化或使用任何其他技术来提高严格模式下的性能 稍微改一下 除了其他目标之外 严格模式是否旨在允许浏览器引入额外的优化或其他性能增强 除其
  • cakephp - 获取表名称及其列详细信息

    有谁知道如何从模型名称获取表名称 另外我想获取该模型 表名称的所有列名称及其类型 是否有可能获得给定型号名称的此类详细信息 Thanks 表名 要获取该表 请参阅 this gt Model gt table 或者检查类变量的模型 useT
  • geocomplete 不是使用自动完成的函数

    您好 我正在使用自动填充代码 收到错误 geocomplete 不是一个函数 如果在本地 单独的文件 中使用它 它对我有用 可能是什么错误 function location geocomplete alert gine details g
  • 如何知道 RecyclerView / LinearLayoutManager 是否滚动到顶部或底部?

    目前我正在使用以下代码来检查是否应启用 SwipeRefreshLayout private void laySwipeToggle if mRecyclerView getChildCount 0 mRecyclerView getChi
  • 无法连接到数据库来执行身份功能

    我使用 ASP NET MVC5 创建了一个新应用程序 使用个人用户帐户来确保安全性 并使用代码优先迁移来进行模型 数据库建模 所有选项均为默认 我想为其设置自定义用户和角色 所以我使用创建了一个种子RoleManager and User