因此,我有一个页面,我只希望匿名用户可以看到,并且经过身份验证的用户可以重定向。所以,像这样:
<location path="Login_ForgotUserID.aspx">
<system.web>
<authorization>
<allow users="?" />
<deny users="*" />
</authorization>
</system.web>
</location>
问题是,当经过身份验证的用户尝试访问它时,会将其重定向到登录页面。我怎样才能让他们更合乎逻辑? obtw,我只限于.NET v2.0x
答案 0 :(得分:2)
为什么不将if ( Request.IsAuthenticated ) { Response.Redirect ...
添加到页面的Page_Load事件中,而不必担心配置它?不幸的是,你只能配置一个页面来处理登录,如果有人没有访问权限,他们将被定向到它。您也可以在登录时检查ReturnURL以查看它是否来自页面并且用户是经过身份验证的,但对我来说这是一个很好的解决方案。
答案 1 :(得分:1)
好的,所以答案是我需要在呈现之前修改菜单。我从未找到通过更改authoriztion / SecurityTrimming来处理SiteMap的方法。所以我决定尝试在源头修改SiteMap,然后我发现了如何修改MenuItems as they were bound。这似乎是最有效的方法。
答案 2 :(得分:0)
不确定如何在web.config中执行此操作。在Login_ForgotUserID.aspx页面中,可能在加载/呈现之前检查用户是否已经过身份验证。如果用户已通过身份验证,则会将其重定向到某个无害的主页或默认页面。
答案 3 :(得分:0)
您也可以在这里查看角色。
如果您要将所有用户默认添加到某个角色,请说“已验证”,那么您可以:
<location path="Login.aspx">
<system.web>
<authorization>
<deny roles="authenticated" />
<allow users="*" />
</authorization>
</system.web>
</location>
您必须确保列表中的deny是fisrt,因为这些是按顺序处理的,并且使用了第一个匹配。
另外两种做类似事情的方法: