Orchard Core中的ASP.NET核心标识实现

时间:2017-05-05 01:02:38

标签: orchardcms

我想在Orchard Core(Orchard 2)中扩展User类,添加一些其他属性,例如FirstName,LastName。 我知道我可以将这些信息存储在像UserProfile这样的单独实体中,但有时只使用我自己的IUser实现会很方便。 它看起来像OrchardCore实施"会员系统"与Orchard.Users.Models.User类型相关联。 我看到有服务

IUserService.CreateUserAsync(用户用户,...

可能最好使用IUser接口而不是Orchard.Users.Models.User类型? 我试图从Orchard.Users.Models.User类继承,如

class MyUser : Orchard.Users.Models.User
{
  ..
}

但是当我尝试调用 IUserService.CreateUserAsync(myUser)时出现错误

`Unable to cast object of type 'YesSql.Indexes.DescribeContext`1[MyTestModule.Abstractions.Models.MyUser]' to type 'YesSql.Indexes.DescribeContext`1[Orchard.Users.Models.User]'.`

由于Orchard Core使用Document storage DB,为什么我不能只创建自己的IUser实现并使用它?它将来会被修复吗?现在可能有些解决方法吗?

1 个答案:

答案 0 :(得分:0)

回答我的问题,可能对某人有用。 用户可扩展性在“users”分支中实现,现在已合并为master。

有多种解决方案

  1. 现在,Orchard.User实现了IEntity,您可以使用Drivers添加自定义属性,与为网站设置实现的方式完全相同。

  2. 您可以尝试直接从Orchard.Users.User继承,但我不确定它会因为Yes Sql而起作用,因为我记得,是的,Sql不允许检索并保存派生模型,可能它已修复,需要检查

  3. 如果上述解决方案不适合您的需求,您可能需要使用其他ORM,如EF。我担心你必须实现IUser接口,在这种情况下你需要覆盖ASP.NET身份存储服务(IUserStore,IUserService ..)+可能你需要覆盖管理工具的“用户”和“角色”用户界面,因为他们依赖关于标准的Orchard的用户实现。 你不需要重写Orchard.OpenId,因为它依赖于IUser接口,但是!如果您需要发布自己的自定义“授权声明”,您可能需要覆盖OpenId的控制器