我已从此处引用的链接安装了asp.net identity 2.0示例:
http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx
并对样本和最佳实践提出一些具体问题。我意识到样本是测试版,所以这可以解释我的一些问题\问题。
1)为什么大多数控制器构造器例如AccountController在其构造函数中获取UserManager类的实例。没有我可以看到的DI,控制器也有一个UserManager类型的公共属性,它从Owin Context获得一个缓存的实例。这只是(坏)脚手架的产品)还是我错过了一些微妙的DI?
2)我希望使用其他特定于应用程序的数据来扩充ApplicationUser和ApplicationDBContext。要获取当前ApplicationDBContext类的副本,看起来我必须获取当前的Owin上下文,然后从中获取ApplicationDBContext的副本。它是否正确?我正在考虑使用ApplicationDBContext属性和UserManager属性创建基本控制器类,这些属性遵循AccountController中演示的模式,然后从中继承需要这些属性的控制器。
3)隐含的假设是每个HTTP请求都需要一个有效的applicationdbcontext吗?这不是浪费吗?
4)最后,我希望添加一个ApprovedByAdmin属性,该属性仅允许用户登录,如果他们的注册已被管理员批准。我设想将此添加到applicationuser。根据Login方法的示例,通过UserManager类对各种属性进行检查,例如:
UserManager.IsLockedOutAsync(user.Id))
UserManager.CheckPasswordAsync(user, password))
我不确定为什么每个都是作为单独的异步调用完成的,但由于我无法修改UserManager,我是否必须执行以下操作:
var user = await UserManager.FindByNameAsync(userName);
if(!user.ApprovedByAdmin)
{
....
}
我认为这就是我现在的所有问题!
答案 0 :(得分:2)