2010-08-14 45 views
3

默认文档功能在IIS中被关闭,这里的情况...asp.net窗体身份验证重定向问题

我的项目开始页说的是A.aspx。我运行该项目,果然,A.aspx出现在浏览器的url中。就像它应该虽然,A.aspx发现没有用户登录并重定向到Login.aspx应该像。

A.aspx:

if (Session["UserStuff"] == null) 
     Response.Redirect("~/Account/Login.aspx"); 

的login.aspx的显示出来,但是当在,代码的用户日志:

FormsAuthentication.RedirectFromLoginPage(txtUserName.Text,TRUE);

总是重定向到

我已经研究FormsAuthentication.GetRedirectUrl果然返回“Default.aspx的”

我难倒“的Default.aspx”,而不是“A.aspx”? ??

+0

这里需要注意的一点很重要,您应该避免使用会话进行身份验证信息/状态。由于您正在使用FormsAuth,因此仅使用它来确定身份验证。使用会话来存储用户级别的偏好等(在用户认证之后填充)。 – captaintom 2010-08-14 12:27:11

+0

是的,没错,我只检查用户在会话中是否有“内容”,但我没有对会话进行身份验证。我实际上是通过第三方API进行身份验证,然后在会话中放置一个对象,如果成功的话。 – Bob 2010-08-14 12:39:11

回答

6

web.config你可以set the default page使用defaultUrl属性:

<authentication mode="Forms"> 
    <forms 
     loginUrl="login.aspx" 
     defaultUrl="a.aspx" 
     protection="All" 
     timeout="30" 
    /> 
</authentication> 
+0

这是系统管道。 – Venemo 2010-08-14 12:30:50

0

如果您使用FormsAuthentication,你的设置应该在web.config中定义。这听起来像是你在DefaultUrl的web.config中有一个默认设置。你不应该需要会话重定向。 FormsAuthentication应该为您执行此操作。如果没有找到它,检查会话并强制SignOut()不会受到影响,但FormsAuthentication应该执行此重定向。

+0

谢谢,但我找不到包含default.aspx的web.config中的任何内容,而不是它在默认文档列表中,但启用=“false”。 反正我不一定需要一个默认的URL。我希望用户在验证后可以重定向到他们的原始页面(A.aspx)。 – Bob 2010-08-14 12:23:43

1
+0

这是一篇不错的文章,但它并不完全是我想要做的。我的问题是,当请求A.aspx时,如果用户未通过身份验证,则会将其发送到登录页面,然后重定向到其原始请求,而不是硬编码页面。问题是GetRedirectURL始终是default.aspx,而不是原始的A.aspx请求。 – Bob 2010-08-14 12:31:04

+0

@Bob - 如果你没有DefaultUrl,它只会选择default.aspx作为框架。当FormsAuthentication使用自己的机制时,会将一个RedirectUrl附加到url到login.aspx,并且用户在该点处正确重定向。如果没有指定RedirectUrl,则使用DefaultUrl,因此不会因为指定它而受伤。我认为这里的问题是,您使用自己的会话代码来执行此重定向,而不是允许FormsAuth处理它。 – 2010-08-14 12:37:28

+0

听起来不错。我不能正确地进行表单身份验证,并且default.aspx来自框架 - 感谢我会看看我能做些什么。 – Bob 2010-08-14 12:44:42

0

从我的理解,当用户redirectoed到您的登录屏幕,窗体身份验证机制将添加该用户最初特林访问的页面的网址,到登录网址他们用户试图访问。例如,如果您有一个登录页面:http; // bob/login.aspx,并且用户试图访问http; // bob/showmethemoney.aspx,那么他们将被重定向到http; // bob/login。 ASPX?RETURNURL = showmethemoney.aspx。因此,如果您在用户登录后使用ReturnUrl重定向用户,则用户将始终返回到他们最初尝试访问的资源。