#.net #openid #dotnetopenauth
#.net #OpenID #dotnetopenauth
Вопрос:
Я использую библиотеку DotNetOpenAuth для создания входа в систему единого входа для Google и Yahoo. Я перенаправляю провайдеру программно, используя запрос.RedirectToProvider() когда пользователь нажимает на мою кнопку LinkButton (я использую пользовательский элемент управления входом).
Это отлично работает для Google и Yahoo во всех браузерах. Проблема в том, что Yahoo, похоже, думает, что оно открывается во всплывающем окне, и изменяет размер всего окна.
Как мне установить тип пользовательского интерфейса в DotNetOpenAuth, чтобы предотвратить такое поведение? Похоже, что в UIModes есть только режим всплывающего окна?
Редактировать: на самом деле я не использовал расширение UIRequest. Это было частью моих усилий по отладке.
Код запроса выглядит следующим образом:
Dim OpenIDEndpoint As String = WellKnownProviders.Yahoo.ToString, OpenID As OpenIdRelyingParty = New OpenIdRelyingParty
Dim LoginRequest As IAuthenticationRequest = OpenID.CreateRequest(OpenIDEndpoint)
Dim Fields As ClaimsRequest = New ClaimsRequest()
Fields.Email = DemandLevel.Require
Fields.FullName = DemandLevel.Require
Fields.Nickname = DemandLevel.Require
Fields.BirthDate = DemandLevel.Require
Fields.Gender = DemandLevel.Require
LoginRequest.AddExtension(Fields)
LoginRequest.RedirectToProvider()
Ответ №1:
Расширение пользовательского интерфейса предназначено исключительно для использования всплывающими окнами. Если вы не открываете страницу входа провайдера во всплывающем окне, не прикрепляйте UIRequest
расширение.
Я ожидаю, что это решит проблему с изменением размера.
Комментарии:
1. Это действительно странно, я на самом деле не использовал расширение UIRequest (я только пытался исправить поведение с его помощью после возникновения проблемы). Я не знаю, почему Yahoo предполагает, что это во всплывающем окне. Где-нибудь еще я мог случайно установить это значение?
Ответ №2:
Чувствовал, что это было лучше представлено в ответе, чем в комментарии:
Даже страница входа в систему Yahoo в StackOverflow имеет ту же проблему!
При проверке ссылки для входа в систему единого входа Yahoo я заметил, что страница входа в систему единого входа Yahoo, похоже, оптимизирована для входа во всплывающие окна. На странице есть этот JS:
<script type="text/javascript">
var isPopup = "true"; //<-- Note this
if (window.opener || isPopup) {
var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
(function() {
if (Dom.getViewportWidth() < 500 || Dom.getViewportHeight() < 675) {
window.resizeTo(500,675);
}
})();
...
Несмотря на то, что SSO не использует всплывающие окна, Yahoo, похоже, устанавливает значение isPopup в true. Я не знаю, является ли это ошибкой со стороны Yahoo или какой-либо ошибкой в DotNetOpenAuth. Я бы приветствовал мнение Эндрю по этому поводу?
Обновить:
Странно, SSO съел мое обновление.
http://developer .yahoo.com/oauth/guide/oauth-userauth.html — Yahoo, по-видимому, оптимизировала свою страницу входа в систему единого входа ТОЛЬКО для всплывающих окон. Изменение размера окна, вероятно, является результатом этого.