2011-03-10 187 views
0

所以我得到了2个.aspx文件。一个叫login,一个叫default。这个想法是,当你启动应用程序时,你将被踢到登录屏幕。我与在default.aspx.vb文件下面的代码这样做:asp.net授权问题授权所有人

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) 

     If (HttpContext.Current.User.Identity.IsAuthenticated = False) Then 

      Response.Redirect("Login.aspx") 


     End If 

    End Sub 

问题是,你总是验证的某些原因。它总是返回true。 我的Web配置文件看起来像这样:

<configuration> 
    <appSettings> 
    <add key="strConn" value="EDITED"/> 

    </appSettings> 
    <location path="~/Styles"> 
    <system.web> 




    <customErrors mode ="Off"> 

    </customErrors> 

    <authentication mode="Forms"> 
    <forms name=".ASPXAUTH" 
      loginUrl="Login.aspx" 
      protection="All" 
      timeout="30" 
      path="/"> 
    </forms> 
    </authentication> 

    <authorization> 

    <deny users="?" /> 
    <allow users="*" /> 

    </authorization> 
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"> 
    <assemblies> 
     <add assembly="Microsoft.Data.Odbc, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
     <add assembly="system.web.security"/> 

    </assemblies> 
    </compilation> 



</system.web> 
    </location> 
</configuration> 

我已经试过藏汉没有改变任何东西。用户通过数据库进行身份验证。目前我正在Visual Studio中运行该程序,而不是在我的网站上运行。当用户通过数据库检查时,我使用下面的代码:

FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkPersistCookie.Checked) 

那么任何想法为什么人们总是被授权? 。

回答

2

我认为问题是位置标记。您只将这些规则应用于样式目录,而不是整个网站。

+0

那它应该在哪里?我现在没有视觉工作室。但我会测试明天。你能告诉我位置标签通常放在哪里吗? – 2011-03-12 19:09:01

+0

您应该只是删除位置标记。你在做的是说所有这些设置只适用于Styles目录。我无法想象这就是你想要的。 – joelt 2011-03-12 20:12:36

+0

嗯,但现在我的所有文件都丢失了CSS,好消息是,现在一切正常,经过1星期的努力才发现,这只是一个愚蠢的位置标记..:p神感觉很好=) – 2011-03-12 21:06:05

2

您无需编写任何代码执行时没有登录重定向的框架是足够聪明,看认证,并记录你在

两个项目需要注意:

更改此:

<deny users="*" /> 

到:

<deny users="?" /> 
<allow users="*" /> 

ŧ他否认只有未经认证的用户。

如果这有所作为,第二项要检查的是用户信息。在立即窗口中,输入:

HttpContext.Current.User.Identity.Name HttpContext.Current.User.Identity.AuthenticationMode //或类似命名的,忘了确切名称

,看看它会告诉你.. 。什么类型的对象是Identity?它是GenericIdentity,FormsIdentity还是WindowsIdentity?

谢谢。

+0

我将更改为<拒绝用户=“?” /> 但我仍然有同样的问题。拒绝?意味着不允许陌生人。但是,允许*做什么? 此后,我尝试了此HttpContext.Current.User.Identity.AuthenticationType,并返回值是NTLM。由于我在asp.net上全新,我不知道这是什么,也许你可以告诉我? :) 然后我试着用这个HttpContext.Current.User.Identity.GetType来获取System.Security.Principal.WindowsIdentity的Identity类型。 这是你想要的吗? :) – 2011-03-10 16:26:16

+0

哦,名字,我从身份得到的是虚幻\管理员。这是我的电脑的名称和我的用户帐户在这台电脑上的用户名。我实际上有一个关于如何改变这个网站的问题:http://stackoverflow.com/questions/5152735/saving-the-login-name-as-current-user-identity-in-asp-net。 – 2011-03-10 16:31:48

+0

是的,它使用Windows身份验证,而不是表单身份验证。拒绝后的表示允许所有经过身份验证的用户(按照以下顺序处理:deny unauthenticated,allow all,并按顺序处理这些规则)。 – 2011-03-10 19:08:10