Edg*_*zar 3 migration authentication localdb asp.net-mvc-5
我已经使用 ASP.NET MVC5 创建了一个新应用程序,使用个人用户帐户进行安全性和代码优先迁移进行模型/数据库建模。所有选项都是默认的。
我想为它设置自定义用户和角色,所以我创建了一个种子RoleManager,UserManager用于填充数据库。它工作正常,创建 3 个用户、3 个角色并正确设置每个用户的角色。
我可以正确登录应用程序。问题是我无法使用User执行任何 Identity 方法
,这是登录的 User ,我唯一能得到的是User.Identity.IsAuthenticated值和User.Identity.Name,这是正确的。每个其他方法,如Roles.GetRolesForUser("John"), or User.IsInRole("Student"),总是产生这个异常:
ProviderException :尚未启用角色管理器功能。
好吧,就像在本文中一样,我设法<roleManager enabled="true" />在 Web.config 中插入了,现在响应需要很长时间,并生成如下异常:
参考:
Roles.IsUserInRole("Student")
Run Code Online (Sandbox Code Playgroud)
产生:
HttpException
Run Code Online (Sandbox Code Playgroud)
参考:
Roles.GetRolesForUser(User.Identity.Name)
Run Code Online (Sandbox Code Playgroud)
产生:
NullReferenceException
Run Code Online (Sandbox Code Playgroud)
以学生角色登录访问“关于”页面:
[Authorize(Roles="Teacher")]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
Run Code Online (Sandbox Code Playgroud)
产生:
SqlException
HttpException
Run Code Online (Sandbox Code Playgroud)
就像我根本没有连接到数据库,它是自动生成的 LocalDB,我可以在种子方法中填充,甚至可以登录到应用程序。
我什至可以从 AspNetUsers 表加载数据并使用以下代码在视图中显示它:
Roles.IsUserInRole("Student")
Run Code Online (Sandbox Code Playgroud)
请帮忙 :'(
这是种子代码,工作正常,因此它可以使用身份引擎连接到数据库。
HttpException
Run Code Online (Sandbox Code Playgroud)
这是因为混合了 ASP.NET Identity 和 ASP.NET Membership,这样做了:
<system.web>
<roleManager enabled="true" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
您启用了成员资格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>
Run Code Online (Sandbox Code Playgroud)
很可能您没有安装 SQL Express,这就是您收到超时和 SQL 异常的原因。
对于 ASP.NET Identity 不要使用System.Web.Security.Roles(它是 ASP.NET Membership 的一部分),而是使用Microsoft.AspNet.Identity.RoleManager。
| 归档时间: |
|
| 查看次数: |
2309 次 |
| 最近记录: |