简体   繁体   English

asp.net表单身份验证仅重定向到default.aspx

[英]asp.net forms authentication only redirects to default.aspx

I am using ASP.NET Forms Authentication with an activation email. 我正在将ASP.NET表单身份验证与激活电子邮件一起使用。 I have gotten the registration to work, which adds the user to the database and sends the activation email, the email is sent to the user and the click on it and are activated. 我已经完成了注册工作,将用户添加到数据库中并发送了激活电子邮件,该电子邮件被发送给用户并单击该用户并被激活。 I am able to login with the correct crednetials, but everytime- it just redirects to default.aspx at the root of my project. 我可以使用正确的凭据登录,但是每次-它只重定向到项目根目录下的default.aspx。 I tried adding links to pages in the sub directory allowed for that role- but it just brings you back to the login page. 我尝试将链接添加到允许该角色的子目录中的页面,但这只是将您带回登录页面。 When you login again- it just goes back to default.aspx 当您再次登录时,它会回到default.aspx

Here is the code on login.aspx.vb 这是login.aspx.vb上的代码

Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Web.Security
Imports Microsoft.VisualBasic
Imports System




Partial Class login
Inherits System.Web.UI.Page

Protected Sub ValidateUser(sender As Object, e As AuthenticateEventArgs) Handles Login1.Authenticate
    Dim userID As Integer = 0
    Dim roles As String = String.Empty
    Session("roles") = Nothing
    Using con As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\BandDatabase.mdf;Integrated Security=True")
        Using cmd As New SqlCommand("Validate_User")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("@Username", Login1.UserName)
            cmd.Parameters.AddWithValue("@Password", Login1.Password)
            cmd.Connection = con
            con.Open()
            Dim reader As SqlDataReader = cmd.ExecuteReader()
            If reader.Read() Then
                userID = Convert.ToInt32(reader("UserId"))
                roles = reader("RoleName").ToString()
                Session("roles") = roles
            End If

            con.Close()
        End Using
        Select Case userID
            Case 1
                Login1.FailureText = "Username and/or password is incorrect."
                Exit Select
            Case 2
                Login1.FailureText = "Account has not been activated."
                Exit Select
            Case Else
                Dim ticket As New FormsAuthenticationTicket(1, Login1.UserName, DateTime.Now, DateTime.Now.AddMinutes(2880), Login1.RememberMeSet, roles,
             FormsAuthentication.FormsCookiePath)
                Dim hash As String = FormsAuthentication.Encrypt(ticket)
                Dim cookie As New HttpCookie(FormsAuthentication.FormsCookieName, hash)
                If ticket.IsPersistent Then
                    cookie.Expires = ticket.Expiration
                End If
                Response.Cookies.Add(cookie)
                Response.Redirect(FormsAuthentication.GetRedirectUrl(Login1.UserName, Login1.RememberMeSet))
                Exit Select
        End Select
    End Using
End Sub
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        If Me.Page.User.Identity.IsAuthenticated Then
            FormsAuthentication.SignOut()
            Response.Redirect("~/login.aspx")
        Else
            Session.Abandon()
            Session.Clear()
        End If
    End If
End Sub
End Class

Here is the web config (root of project- I read something about having to put a web config in each directory) 这是Web配置(项目的根,我读过一些关于必须在每个目录中放置Web配置的内容)

      <authentication mode="Forms">
      <forms defaultUrl="~/Default.aspx" loginUrl="~/login.aspx"      slidingExpiration="true" timeout="2880">
      </forms>
    </authentication>
  </system.web>
      <!--https://www.codeproject.com/Articles/2905/Role-based-Security-with-   Forms-    Authentication-->
      <location path="Admin">
       <system.web>
      <authorization>
        <!-- Order and case are important below -->
        <allow roles="Admin" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="Judges">
    <system.web>
      <authorization>
        <!-- Order and case are important below -->
        <allow roles="Judge" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="Students">
    <system.web>
      <authorization>
        <!-- Order and case are important below -->
        <allow roles="Student" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

Here is the directory structure... directory structure 这是目录结构... 目录结构

Full web config... 完整的网络配置...

<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ChartImageHandler" />
      <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </handlers>
  </system.webServer>
  <connectionStrings>
    <add name="Database" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
    <add name="BandDatabaseConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\BandDatabase.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <httpHandlers>
      <add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      validate="false" />
      <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
      validate="false" />
    </httpHandlers>
    <pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </controls>
    </pages>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.5">
      <buildProviders>
        <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
      </buildProviders>
    </compilation>
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms defaultUrl="~/Default.aspx" loginUrl="~/login.aspx" slidingExpiration="true" timeout="2880">
      </forms>
    </authentication>
  </system.web>
  <!--https://www.codeproject.com/Articles/2905/Role-based-Security-with-Forms-Authentication-->
  <location path="Admin">
    <system.web>
      <authorization>
        <!-- Order and case are important below -->
        <allow roles="Admin, Student, Judge" />
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="Judges">
    <system.web>
      <authorization>
        <!-- Order and case are important below -->
        <allow roles="Judge" />
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="Students">
    <system.web>
      <authorization>
        <!-- Order and case are important below -->
        <allow roles="Student" />
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
  <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="people@overthere.com">
        <network host="localhost" userName="" password="" defaultCredentials="true" />
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

Web.config tells you where the login redirects to (Default.aspx): Web.config告诉您登录重定向到(Default.aspx)的位置:

<authentication mode="Forms">
    <forms defaultUrl="~/Default.aspx" 
        loginUrl="~/login.aspx"
        slidingExpiration="true" timeout="2880">
    </forms>
</authentication>

i have a login page that uses the web.config to redirect to the default page. 我有一个使用web.config重定向到默认页面的登录页面。

i also use a separate login control on certain pages that redirects to the page they're on. 我还在某些页面上使用单独的登录控件,该控件重定向到它们所在的页面。

note: if a user is not allowed on the page/directory they're trying to log in on, they are automatically redirected to the default page. 注意:如果不允许用户在他们尝试登录的页面/目录上访问,则他们会自动重定向到默认页面。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM