我根据MCTS自学训练套件MCCS考试70-562的理解,设置了以下表格认证,但它没有认证......
<authentication mode="Forms">
<forms name="ortund" loginUrl="~/Login.aspx" timeout="30" slidingExpiration="true" />
</authentication>
</system.web>
<location path="Members">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
基本上,它需要允许未经身份验证的用户访问网站的所有区域,~/Members/
以及其中的所有文件和文件夹除外。
目前它所做的一切都是不断重定向到登录页面......这里有一个我缺少的概念吗?我不明白我做错了什么。
以下是登录的代码:
Protected Sub lnkLogin_Click(sender As Object, e As System.EventArgs) Handles lnkLogin.Click
Dim db As New Database
' gets data from the database with the supplied credentials
' if true, the user exists, proceed to log in
If db.Login(txtEmail.Text, txtPassword.Text, "ortund") Then
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, True)
If Not String.IsNullOrEmpty(Request.Params("ReturnUrl")) Then
Response.Redirect(Request.Params("ReturnUrl"))
Else
Response.Redirect("~/Members/Default.aspx")
'Response.Redirect("~/AboutUs.aspx")
End If
Else
lblerr.Text = "Invalid username or password"
End If
End Sub
Page_Load for Members / Default.aspx:
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
If Context.User.Identity.IsAuthenticated Then
loadUserPage()
End If
End If
End Sub
答案 0 :(得分:0)
Aaaaand经过2个疯狂的小时震耳欲聋的甜蜜的东西都在SO,IRC,Facebook和Skype上......以下是我如何解决这个问题:
我创建了一个测试应用程序,以确保我的概念正确。该测试仅与上述不同,因为它使用web.config文件中指定的凭据进行登录,而实际项目则在数据库中查询用户凭据。
您可以下载我的测试代码here(它使用.NET 4,但您也可以将web.config文件中的相同身份验证元素应用于早期的框架)。
由于此测试用例有效,我可以确定问题不在代码中,这意味着它是一个设置问题。
解决方案
在这种情况下修复很简单。我从IIS中删除了虚拟应用程序,并使用.NET 4.0 Classic AppPool重新创建它。