- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我是 ASP.NET 身份的新手,我仍在努力了解它是如何工作的。不幸的是,我发现我试过的许多教程都是针对 Identity 1.0 的,而我正在尝试使用 Identity 2.0。
我面临的最大问题是我认为很简单,但事实证明并非如此。我想要做的是将现有数据库与现有用户表一起使用。目前我似乎能做的就是让 Identity 创建它自己的表来存储用户数据。我不想使用 Entity Framework,但我很难将 Entity Framework 与 Identity 2.0 分开。
虽然我的情况是使用 SQL Server,但我想我会尝试通过以下链接为 MySQL 实现自定义提供程序:http://www.asp.net/identity/overview/extensibility/implementing-a-custom-mysql-aspnet-identity-storage-provider和 https://github.com/raquelsa/AspNet.Identity.MySQL .这似乎仅在身份 1 下有效。似乎确实有一个更新的,但是它使用 Entity Framework 。我也试过 https://github.com/ILMServices/RavenDB.AspNet.Identity .
在我尝试过的所有方法中,我都卡在了以下行中:
var manager = new IdentityUserManager(new UserStore<IdentityUser>(context.Get<ApplicationDbContext>()));
我面临的问题是我需要根据 RavenDB 的说明删除 ApplicaitonDbContext 类,但是我不知道该在这一行中放入什么。
我得到的错误是:
The non-generic type 'AspNet.Identity.MySQL.UserStore' cannot be used with type arguments
和
The type or namespace name 'ApplicationDbContext' could not be found (are you missing a using directive or an assembly reference?)
第二个错误是意料之中的,但我不确定在这行代码中使用什么来代替。有没有人有过在不使用 Entity Framework 的情况下实现自定义提供程序的经验?
谢谢。
更新 1:
我尝试了以下教程 [ http://aspnetguru.com/customize-authentication-to-your-own-set-of-tables-in-asp-net-mvc-5/ ] 但它似乎不完整,在完全按照教程进行操作时会出现编译或运行时错误。我还有一些问题是...
当用“User”替换“ApplicationUser”的所有实例时,IdentityConfig.cs 中的以下行有问题
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<MyDbContext>()));
将 ApplicationUser 更改为 User 会产生以下错误
The type 'WebApplicationTest2.Models.User' cannot be used as type parameter 'TUser' in the generic type or method 'Microsoft.AspNet.Identity.EntityFramework.UserStore'. There is no implicit reference conversion from 'WebApplicationTest2.Models.User' to 'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'.
我也很难弄清楚如何使用用户管理器和许多 ASync 方法。以下几行不起作用:
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, await user.GenerateUserIdentityAsync(UserManager));
在 AccountController.cs 中出现以下错误:
The best overloaded method match for 'Microsoft.Owin.Security.IAuthenticationManager.SignIn(Microsoft.Owin.Security.AuthenticationProperties, params System.Security.Claims.ClaimsIdentity[])' has some invalid arguments.
'WebApplicationTest2.Models.User' does not contain a definition for 'GenerateUserIdentityAsync' and no extension method 'GenerateUserIdentityAsync' accepting a first argument of type 'WebApplicationTest2.Models.User' could be found (are you missing a using directive or an assembly reference?)
最佳答案
在您的示例中,您似乎想要替换 DbContext
与其他东西,但我相信实际上,你需要将你的努力集中在一个更高的层次上。
框架有一个类 UserManager
负责管理但不存储用户及其相关信息。当它想要存储用户(或他们的相关信息)时,默认是使用提供的 UserStore<IdentityUser>
哪个知道如何存储IdentityUser
使用 DbContext
的数据库中的实例.
在 2.0 框架中,身份存储的各个部分被分成几个接口(interface)。提供的默认实现,UserStore<IdentityUser>
实现其中几个接口(interface)并使用 DBContext
将它们的数据全部存储在数据库中.
如果您查看默认提供的基于 UserStore 的 Entity Framework 的定义,您会发现它实现了许多这些小接口(interface):
public class UserStore<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim> : IUserLoginStore<TUser, TKey>,
IUserClaimStore<TUser, TKey>, IUserRoleStore<TUser, TKey>, IUserPasswordStore<TUser, TKey>,
IUserSecurityStampStore<TUser, TKey>, IQueryableUserStore<TUser, TKey>, IUserEmailStore<TUser, TKey>,
IUserPhoneNumberStore<TUser, TKey>, IUserTwoFactorStore<TUser, TKey>, IUserLockoutStore<TUser, TKey>,
IUserStore<TUser, TKey>, IDisposable
where TUser : IdentityUser<TKey, TUserLogin, TUserRole, TUserClaim>
where TRole : IdentityRole<TKey, TUserRole>
where TKey : Object, IEquatable<TKey>
where TUserLogin : new(), IdentityUserLogin<TKey>
where TUserRole : new(), IdentityUserRole<TKey>
where TUserClaim : new(), IdentityUserClaim<TKey>
由于您根本不想使用 Entity Framework,因此您需要提供自己对其中一些关键接口(interface)的实现,这些接口(interface)会将数据存储在您希望存储数据的位置。主界面为 IUserStore<Tuser,TKey>
.这定义了用于存储具有特定类型 key 的用户的契约(Contract)。如果您只想存储用户而没有其他信息,那么您可以实现此接口(interface),然后将您的实现传递给 UserManager
你应该可以开始了。
这不太可能就足够了,尽管您可能需要用户的密码、角色、登录名等。如果是这样,那么您需要创建实现 IUserStore<Tuser,TKey>
的类还执行 IUserPasswordStore<TUser, TKey>
, IRoleStore<TRole, TKey>
和 IUserClaimStore<TUser, TKey>
.
您可以找到所有接口(interface)的列表on MSDN here
根据您要使用的位,您需要实现这些接口(interface)。
您可能还需要定义自己的 Identity*
版本Entity framework already out of the box 存在的类.所以你需要自己的IdentityUser
表示您要存储的用户的类,以及 IdentityUserClaim
为用户 claim 。我自己还没有这样做,所以我不太确定,但我的感觉是您必须这样做。
Scott Allen 有一个 good article关于可能有用的模型的各个部分。
至于您对这一行的问题:
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, await user.GenerateUserIdentityAsync(UserManager));
有一个方法叫GenerateUserIdentityAsync
这是在 Applicationuser
上定义的延伸IdentityUser
.它是在我相信的模板项目中定义的,看起来像这样:
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(
UserManager<ApplicationUser> manager) {
// Note the authenticationType must match the one
// defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity =
await manager.CreateIdentityAsync(this,
DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
因为您没有使用 Entity Framework IdentityUser
那么你要么需要定义一个类似的方法,要么你自己的 User
类或以其他方式实现相同的功能(比如只调用 await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie)
而不是)
关于c# - 带有自定义表的 Identity 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24428520/
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!