在Asp.Net MVC中验证自定义用户类
问题描述:
我有一个系统使用内置的Identity系统为管理部分的用户进行身份验证。在Asp.Net MVC中验证自定义用户类
我想让其他用户通过外部Web服务登录,但想知道是否可以为他们创建不同的用户类,并仍然利用内置的功能,如[Authorize]属性。
比方说,自定义类看起来是这样的:
public class CustomUser
{
public string Name { get; set; }
public string Ssn { get; set; }
}
我会将该用户添加到一个角色,例如“customUser”所以,在控制,我想使用授权属性是这样的:
[Authorize(Roles="customUser")]
public ActionResult DoStuff()
{
// do stuff
}
这是可能的,有一个自定义的用户类和手动验证他?
答
当然。从ApplicationUser
(或任何你叫你的IdentityUser
派生类)只是继承:
public class CustomUser : ApplicationUser
{
public string Name { get; set; }
public string Ssn { get; set; }
}
但是,你不能直接与Authorize
喜欢你的示例代码表明使用它。您需要:
在您的操作中执行自定义检查以验证用户类型。
向用户添加角色并通过该自定义角色进行授权。
创建一个自定义
AuthorizeAttribute
,检查用户是正确的类型
UPDATE
当您从ApplicationUser
继承,你不会得到一个单独的表。 EF将向dbo.AspNetUsers
添加一个Discriminator
列,该列将具有“ApplicationUser”或“CustomUser”的值,具体取决于保存的内容。当从数据库查询用户时,EF将使用此列来实例化适当的类。
有一点要注意的是UserManager
实际上是UserManager<ApplicationUser>
的一个实例。它是一个泛型类,因此,在实例化时,无论类型参数是否指定用户类,都将对类UserManager
进行操作。因此,如果您想使用CustomUser
,则需要使用UserManager<CustomUser>
的实例。
好的,太棒了。我只是没有意识到如何保存这个自定义用户并验证他。我将有一个新的数据库表与他的所有CustomUser字段和一些ApplicationUser字段。我可以创建CustomUser并使用身份UserManager进行身份验证吗? – joks
查看上面的更新。 –
非常感谢您的帮助。如果你不介意,我还有最后一个问题。我是否需要创建一个新的SignInManager才能手动验证CustomUser?还是有更简单的方法来做到这一点? – joks