在Identity 2.0中成功实现自定义UserManager <IUser>

我正在尝试浏览黑洞,这是Identity Membership的自定义实现。 我现在的目标是简单地从我的ApiController获取这一行来正确检索我的UserManager:

public IHttpActionResult Index()
{
    var manager = HttpContext.Current.GetOwinContext().GetUserManager<UserManager<MyUser,int>>();
    //manager is null
}

这是我的设置。 在我的Startup的配置中,我设置了WebApi并添加了我的OwinContext:

app.CreatePerOwinContext<UserManager<MyUser,int>>(Create);

我的创建方法:

public static UserManager<User,int> Create(IdentityFactoryOptions<UserManager<MyUser,int>> options, IOwinContext context)
{
   return new UserManager<MyUser,int>(new UserStore(new DbContext()));
}

其余的是我可以做的最基本的实现。

MYUSER:

public class MyUser : IUser<int>
{
    public int Id { get; set; }
    public string UserName { get; set; }
}

MyUserStore:

 public class MyUserStore : IUserStore<MyUser,int>
 {
    private IdentityDbContext context;
    public MyUserStore(IdentityDbContext c)
    {
       context = c;
    }

    //Create,Delete, etc implementations
 }

MyDbContext:

 public class MyDbContext : IdentityDbContext
 {
     public MyDbContext() : base("Conn")
     {

     }
 }

这是为了了解身份如何运作,我相信没有人知道。 我希望能够最终完全自定义用户和角色,避免使用Microsoft的IdentityUser。

再次,我现在的问题是,在我的控制器中,当我试图检索我的UserManager时,我得到了null

任何和所有的帮助,不胜感激。


我有几个错误,但主要的是我的Startup类看起来像:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseWebApi(new WebApiConfig());

        app.CreatePerOwinContext(MyDbContext.Create);
        app.CreatePerOwinContext<MyUserManager>(MyUserManager.Create);
    }
}

当然,OWIN管道将在发起WebAPI调用之后插入我的依赖关系。 切换这些是我的主要问题。

另外,我终于在我的Google搜索中找到了这个伟大的指南。 它几乎可以解答我遇到的所有问题。 我需要实现一个UserManager<MyUser,int>的具体类

我希望这能够在以后帮助别人。


你在使用MyIdentity.User或MyIdentity.MyUser吗? 您的示例中有两个不同的对象传递给TUser参数。

我测试了你的实现,并没有检索UserManager的注册实例的问题。

要完全自定义您的用户和角色,您需要编写UserManager的新实现,以使您的认证,声明,角色,方法调用等起作用。

如果您想了解身份是如何工作的,我会建议使用UserManager和IdentityUser的默认实现。 让它首先工作。

这是一个很好的教程

最终,创建自己的用户来实现IdentityUser。 所有的UserManager功能都可以工作,并且您将可以访问您的新属性。 其他属性将自动构建到由IdentityDbContext生成的AspnetUser表中。

public MyIdentityUser : IdentityUser
{
   public int Id {get; set;}
   public string CustomUserId {get; set;}
   public string UserId { get; set; }
}

或者,您可以使用对其他对象的外键引用来开始构建自定义的MyIdentityUser。

public MyIdentityUser : IdentityUser
{
   public virtual UserProperties Properties { get; set; }
}

这有帮助吗?

链接地址: http://www.djcxy.com/p/81953.html

上一篇: Successfully implementing custom UserManager<IUser> in Identity 2.0

下一篇: NSLayoutManager characterIndexForPoint method failing on ios9