2009-09-17 3 views
3

Я играю с проверкой подлинности и авторизацией, чтобы подготовиться к какой-то задаче. Я создал две страницы: Login.aspx и Default.aspx. В файле конфигурации я установил аутентификацию формы и отрицал неавторизованный доступ пользователей:ASP.NET: аутентификация пользователя в коде

<authentication mode="Forms"> 
     <forms name="aaa" defaultUrl="~/Login.aspx" /> 
    </authentication> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 

Тогда я написал простой код для аутентификации пользователя в моем Login.aspx:

protected void Page_Load(object sender, EventArgs e) 
     { 
      GenericIdentity identity = new GenericIdentity("aga", "bbb"); 
      Context.User = new GenericPrincipal(identity, new String[] { "User" }); ; 
      Response.Redirect("~/Default.aspx"); 
     } 

Когда я бегу это, перенаправление не происходит. Вместо этого Login.aspx вызывается снова и снова, потому что пользователь не аутентифицирован (Context.User.Identity.IsAuthenticated является ложным при каждой загрузке). Что я делаю не так?

ответ

7

Context.User только устанавливает основной для текущего запроса. Как только перенаправление имеет место, текущий запрос заканчивается, и новый начинается с не переопределенного принципала снова (который, по-видимому, не аутентифицирован). Таким образом, установка Context.User фактически не аутентифицирует ничего.

Использование FormsAuthentication.SetAuthCookie() установит куки пользователя к действительной стоимости, принятой поставщиком FormsAuthentication, или поместить маркер в URL. Вы можете перенаправить на контент своего сердца, потому что cookie, очевидно, придерживается пользователя для будущих запросов.

Из MSDN (эм добавлено):

При проверке подлинности форм, вы можете использовать метод SetAuthCookie, когда вы хотите, чтобы проверить подлинность пользователя , но по-прежнему сохраняют контроль над навигацией с переадресовывает.

Как уже говорилось, это не обязательно требует куки - название немного вводит в заблуждение, потому что он все равно будет работать через URL, если FormsAuthentication в Cookieless режиме:

Метод SetAuthCookie добавляет формы -тайт аутентификации либо в коллекцию файлов cookie, либо в URL-адрес, если CookiesSupported является ложным.

+0

Server.Transfer вместо Response.Redirect должен исправить эту проблему. –

+0

@ Крис только для текущего запроса - просто задерживает проблему до следующего запроса. –

0

Чтобы установить логин, вам необходимо обратиться к поставщику формАутентификация.

FormsAuthentication.RedirectFromLoginPage (txtUser.Text, chkPersistLogin.Checked)

простой пример

+0

и если я не хочу, чтобы пользователь был перенаправлен?я просто хочу знать, как его аутентифицировать. – agnieszka

+0

все равно не работает. – agnieszka

0

После создания манекена Context.User вам необходимо выполнить метод FormsAuthentication.SetAuthCookie или RedirectFromLoginPage.

1

Необходимо установить аутентификацию пользователя. Все следующие методы будут работать и позволят вам фактически уйти от вашего экрана входа в систему.

FormsAuthentication.Authenticate() 
FormsAuthentication.RedirectFromLoginPage() 
FormsAuthentication.SetAuthCookie() 

Много способов добраться до одного и того же результата.

Смежные вопросы