2010-09-22 99 views
0

新来的MVC,与asp.net工作了很多,但从未使用内置的会员,认证,授权的东西之前。asp.net mvc会话和会员身份验证

我有2个问题:

  1. 在asp.net几天我会登录在会话用户的详细信息(用户名,&姓氏,电子邮件)(使用自定义类)和存储只是在每个安全页面检查会话[“UserDetails”]!= null,我仍然可以在MVC中做到这一点? (为什么我没有用内置的东西做它? - 移动问题#2)

  2. 在我的数据库我有一个作者表(与用户&通),这是连接到20个其他表andi'我有一个用户表(用户&通),连接到1或2个表。 假设我想使用内置的东西,我如何使用相同的会员供应商验证作者登录和用户登录?以及如何在调用User.Identity.IsAuthenticated时知道当前登录的用户或作者?

谢谢大家!

回答

0

问题1:

在你的控制器,你将使用HttpContext.User中来得到当前的IPrincipal对提出请求的用户。为了确保动作(或整个控制器)的安全,只需使用[授权]属性进行修饰即可。阅读关于这里的授权属性http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

问题2:

在这里,你有两个选择,延长概况提供者来管理额外的数据或松一点参照完整性,只是使用的应用服务,数据库授权和在与用户相关的每个实体中保留并具有UserId字段,并在您的数据访问层中构建您的用户和相关实体集合。我总是使用第二个。

+0

您好,感谢,但你可以更多地讨论选项2“松一点参照完整性,只是使用的应用程序服务数据库” – TomerMiz 2010-09-22 18:43:09

+0

当然,理想情况下,你就会有一个单一的数据库,所以你可以让所有的与用户表的必要关系。采用第二种方法将意味着将有两个数据库,一个用于用户,一个用于应用程序数据,因此用户与其相关实体之间的架构中不存在任何关系。 – JoseMarmolejos 2010-09-23 00:20:11

+0

嗨,所以要用第二种方法,我将不得不在用户数据库中保存用户类型(customr,author ..)?但为什么2个数据库?我可以将用户表和外键从用户分配给客户和作者表。你不觉得吗? – TomerMiz 2010-09-23 07:04:06

0
  1. 你不应该这样做在常规的asp.net。你应该使用表单身份验证来发出已签名的票证,这在2.0+以上可能已与会员提供商。早些时候非常灵活,所以在阅读#2之前,已经没有理由不使用它了)。但是,是的,你仍然可以这样做,并且没有其他不同的建议方式在asp.net MVC中处理它。
  2. 您可以将额外的数据放在故障单中,也可以使用约定将某些内容附加到故障单中的用户名中,然后当接收到Cookie时,可以用自定义主体替换上下文的IPrincipal。
+0

嗨,谢谢,你的意思是把用户名保存在cookie中作为“autor_RealUserName”,以便将其标识为作者? – TomerMiz 2010-09-22 18:50:26

+0

是的,但我的意思是特别在表单身份验证Cookie中,而不是您创建的自定义Cookie。有关表单身份验证的更多信息,请访问此链接:http://msdn.microsoft.com/en-us/library/ff647070.aspx。 – eglasius 2010-09-22 19:31:02