2009-08-18 4 views
1

Я пытаюсь настроить аутентификацию с помощью fewtutorials. Я нашел в парадигме провайдеров членства, найденной в ASP.NET v2.0. Я следил за примерами в учебнике, но, похоже, не может найти способ FormsAuthentication.RedirectFromPage работать соответствующим образом. Когда я пытаюсь войти в систему, учетные данные пользователя проверяются через Membership.ValidateUser, но страница отправляется обратно в Login.aspx вместо Default.aspx. Вот соответствующий отрывок из моего web.config:ASP.NET SqlMembershipProvider Бесконечная петля?

... 
<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" protection="All" timeout="60" name="POTOKCookie" requireSSL="false" path="/FormsAuth" 
     slidingExpiration="true" cookieless="UseCookies" enableCrossAppRedirects="false" defaultUrl="~/Default.aspx"/> 
</authentication> 
<authorization> 
    <deny users="?" /> 
</authorization> 
... 
<membership defaultProvider="CustomizedProvider"> 
    <providers> 
    <clear /> 
    <add name="CustomizedProvider" 
     type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     connectionStringName="LoginDB2" 
     applicationName="POTOK" 
     minRequiredPasswordLength="5" 
     minRequiredNonalphanumericCharacters="0" /> 
    </providers> 
</membership> 

Я проверил, что моя строка соединения является правильным (с Membership.ValidateUser, кажется, работает нормально), и я с помощью элемента управления ASP.NET Войти для пользовательский интерфейс на моей странице Login.aspx. Вот код Аутентифицировать обработчика событий:

Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate 
    If (Membership.ValidateUser(Login1.UserName, Login1.Password)) Then 
     FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet) 
    End If 
End Sub 

Когда я посещаю URL (http://localhost/Project) я принят в: http://localhost/Project/Login.aspx и после «входа» мой URL является: http://localhost/Project/Login.aspx?ReturnUrl=%2fProject%2fDefault.aspx

Я не пропустить шаг конфигурации ?

ответ

1

Проблема заключается в параметре path = "/ FormsAuth". Удалить эту переменную и попробуйте еще раз

Read this post о том, почему путь может быть неправильным

Из MSDN: путь - Необязательный атрибут. Указывает путь для файлов cookie, выпущенных приложением. По умолчанию используется косая черта (/), поскольку большинство браузеров чувствительны к регистру и не отправляют файлы cookie, если есть несоответствие в случае пути.

ПРИМЕЧАНИЕ. Атрибут пути чувствителен к регистру. Поэтому, если вы установили значение атрибута path в/application1, а если имя приложения - Application1, путь cookie аутентификации будет/application1.

Итак, если вы хотите использовать свойство path, вы должны установить его в «/ project», потому что Project - это имя вашего приложения (насколько я понял). Но я не думаю, что вам нужно иметь разные пути, когда вы используете разные имена cookie (например, name = «POTOKCookie» в этом приложении, я надеюсь, что это будет отличаться от других приложений ASP.NET, установленных на том же хосте).

См. PRB: Forms Authentication Requests Are Not Directed to loginUrl Page

+0

Я не удалял свой предыдущий ответ, потому что он также действителен, вам не нужно писать какой-либо код для события Authenticate, с которым вы используете элемент управления Login с членством в ASP.NET, но это не был реальный источник вашей проблемы. Проблема заключалась в использовании файлов cookie. –

0

Если вы используете элемент управления Login с членством ASP.NET, вам не нужно писать код для выполнения проверки подлинности. Однако, если вы хотите создать свою собственную логику аутентификации, вы можете обработать событие аутентификации входа в систему и добавить собственный код аутентификации.

Итак, я предлагаю вам просто удалить событие Login1_Authenticate, насколько мне кажется двойным, потому что сам контроль отвечает за вызов ValidateUser и перенаправление.

Также проверьте DestinationPageUrl свойство Вход управления

Если не указать значение для свойства DestinationPageUrl, пользователь будет перенаправлен на исходную страницу пользователь запрошенной после успешного входа в систему. Так что в вашем случае это свойство не должно быть установлено.

+0

Я удалил событие Login1_Authenticate и удостоверился, что свойство DestinationPageUrl не указано, и я все равно получаю такое же поведение. – toddk