Как мне получить DotNetOpenAuth, чтобы открыть всплывающее окно для аутентификации? - PullRequest
2 голосов
/ 11 октября 2010

Я относительно новичок в веб-разработке, так что, возможно, это вопрос новичка.Я пытаюсь настроить веб-сайт ASP.NET MVC для реализации DotNetOpenAuth в качестве проверяющей стороны OpenID.

Сейчас все это работает, так что это довольно захватывающе.Моя цель состояла в том, чтобы аутентификация OpenID происходила во всплывающем окне.Это похоже на поведение по умолчанию, когда вы используете WebForms с пользовательскими элементами управления DNOA, но я не смог понять это в MVC.

Мне показалось, что я был близок к этому:

var request = OpenIdRp.CreateRequest(id);
request.AddExtension(new UIRequest(Mode = UIModes.Popup));

Но поле Mode в UIRequest доступно только для чтения.

Кто-нибудь знает, как создать запрос?что говорит провайдеру OpenID открыть всплывающее окно?

Спасибо за любую помощь.До сих пор я не смог отследить какие-либо образцы этого в действии.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

На v.3.4.5, который я использую, свойство Mode UIRequest имеет как getter, так и setter.

var req = openid.CreateRequest(openid_identifier);                      

                    // Add UI Request 
                    if (req.DiscoveryResult.IsExtensionSupported<UIRequest>())
                    {
                        req.AddExtension(new UIRequest()
                        {
                            Mode = UIModes.Popup
                        });

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

<form action="/Account/OpenIdLogOn" target="popupWin" onsubmit="return openWindow('/Account/OpenIdLogOn', 'popupWin', 500, 500);">

, где

function openWindow(url, wname, width, height) {
    window.open(url, wname, "height=" + height + ",width=" + width + "location = 0, status = 1, resizable = 0, scrollbars=1, toolbar = 0");
    return true;
}

и в результате просмотра у меня есть следующий JavaScript

    <script type="text/javascript">
        $(function () {
            if (window.opener) {
                window.opener.location.href = window.opener.location.href;
                window.close();
            }
        });
    </script>

Надеюсь, это имеет смысл.

1 голос
/ 12 октября 2010

Сайт Nerddinner имеет именно то, что вам нужно. Он написан на MVC, и вы можете скачать исходный код здесь: http://nerddinner.codeplex.com/.

...