Facebook Connect и проверка подлинности с помощью ASP.NET Forms - проблема времени / файла cookie - PullRequest
3 голосов
/ 15 июля 2010

Вот что у меня есть :

  • Веб-приложение ASP.NET 4.0
  • Аутентификация с помощью форм (на основе файлов cookie)

Вот что я пытаюсь сделать :

  • Интеграция с Facebook Connect (с помощью API JavaScript и графика)
  • Предоставьте услугу единого входа для моих пользователей (автоматический вход пользователей, если они вошли в систему и подключились к Facebook)

На каждой странице есть элемент управления, который показывает анонимных / зарегистрированныхв сведениях о пользователе.

Вот проблема: На Page_PreRender этого пользовательского элемента управления (который находится на каждой странице, поэтому считаю, что это событие выполняется при каждом отдельном запросе страницы), я пытаюсьавтоматическая регистрация на основе статуса аутентификации Facebook (JavaScript API - Cookies).

Если вход выполнен успешно, я регистрируюсь с помощью FormsAuthentication.SetAuthCookie.

Это все работаетхорошо.

Однако, сразу после того, как я делаю единый вход (буквально на следующей строке), мне нужновынести анонимный материал (пожалуйста, войдите в систему) или аутентифицированный пользовательский материал (отображаемое имя и т. д.).Проблема в том, что пользователь еще не прошел аутентификацию на моем сайте.Для «аутентификации» на моем сайте я делаю стандартные вещи (проверьте свойство HttpContext.User.Identity.IsAuthenticated).

Я думаю, что он еще не установлен на "true ", потому что cookie-файл Forms Auth был создан, но в ответе HttpContext.User.Identity.IsAuthenticated основан на запросе в данный момент времени - я прав?там?

Так, конечно, он показывает анонимные данные, даже если пользователь вошел в систему.

Когда я обновляю страницу, конечно, отображаются правильные данные пользователя.

Так что это почти проблема синхронизации. Как я могу автоматически войти в систему пользователя (через FormsAuthentication.SetAuthCookie), гарантируя, что HttpContext.User.Identity.IsAuthenticated истинно?

Может быть, я делаю аутентификацию / единый вход вне то место?

Или мне нужно почти сделать Response.Redirect для себя, чтобы обновить куки в HTTP-запросе?

Как вы все знаете, документация для Facebook Connectразбросаны и минимальны, так что все дело в том, чтобы соединить все воедино.

Любая помощь будет оценена ... ура!

1 Ответ

3 голосов
/ 15 июля 2010

Хорошо, я нашел ответ (и это был ответ, который, я надеялся, не был бы ответом).

Как я и предсказывал, FormsAuthentication.SetAuthCookie создает cookie аутентификации в потоке ответов HTTP. Но HttpContext.User.Identity.IsAuthenticated читает поток HTTP-запросов (в котором нет файла cookie).

Таким образом, решение заключается в программном обновлении страницы с помощью Response.Redirect(this.Context.Request.RawUrl, true) (второй параметр завершает текущее выполнение страницы) для перезагрузки файла cookie в HTTP-запросе.

Вот почему я думаю, что у нас всегда есть страница Login.aspx, которая устанавливает cookie форм, а затем перенаправляет куда-то, потому что к тому времени, когда происходит перенаправление в «куда-то», делается еще один запрос, и файлы cookie обновляются.

Вероятно, я помещу материал для авторизации в Facebook на отдельную страницу .aspx и сделаю это так же, как обычные формы авторизации.

Да, и идея «обновления» была упомянута Microsoft Person здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...