Обходная ошибка в openid-selector (версия prototype.js), которая отключает кнопки входа в Google и Yahoo - PullRequest
1 голос
/ 03 мая 2011

Я пытаюсь использовать прототип версии селектора openid, найденного в openid-selector-1.3.zip, загруженного из Google Code 2011-May-03, с django-openid-auth

I 'Мы отключили демонстрационный режим в коде JavaScript.

Комбинация работает с openid launchpad.net, но не с Google или Yahoo.

Когда я нажимаю Google или Yahoo, ничего не происходит!Кнопка для Google или Yahoo отображается как утопленный.Вот и все.Кроме того, django devserver никогда не показывает форму POST при нажатии кнопок Google или Yahoo.

При нажатии AOL в форму добавляется текстовое поле и кнопка отправки .... но этого не происходит при нажатии Googleили Yahoo ... без дополнительных полей и без кнопки входа / отправки.

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

Были протестированы следующие браузеры: Firefox 3.6.16 (Linux) и Google Chrome (Linux).Похоже, что они функционируют одинаково, оба войдут в openid панели запуска, но ничего не сделают, кроме нажатия кнопки идентификатора при нажатии Google или Yahoo.

Вот журнал веб-сервера django dev, показывающий, что все статические части загружаются.Они скопированы из дистрибутива openid-selector на code.google.com с несколькими незначительными изменениями (отключите демонстрацию, установите каталог с изображениями).Это должно показать, что нужные части доставляются (конечно, они также могут кэшироваться, поэтому отсутствие не будет окончательным ...)

[03/May/2011 04:58:53] "GET / HTTP/1.1" 200 115
[03/May/2011 04:58:56] "GET /openid/login HTTP/1.1" 301 0
[03/May/2011 04:58:56] "GET /openid/login/ HTTP/1.1" 200 2182
[03/May/2011 04:58:56] "GET /static/css/openid.css HTTP/1.1" 200 1007
[03/May/2011 04:58:56] "GET /static/js/prototype.js HTTP/1.1" 200 162353
[03/May/2011 04:58:56] "GET /static/js/openid-prototype.js HTTP/1.1" 200 5931
[03/May/2011 04:58:56] "GET /static/js/openid-en.js HTTP/1.1" 200 2302
[03/May/2011 04:58:56] "GET /static/images/openid-providers-en.png HTTP/1.1" 200 15894

django-openid-auth предоставляет только текстовую запись /отправить кнопку формы в качестве примера.Но он поддерживает шаблон login.html, поэтому в проекте / templates / openid / login.html у меня есть этот шаблон, который отображается:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>Please Login</title>
        <!-- Simple OpenID Selector -->
        <link type="text/css" rel="stylesheet" href="/static/css/openid.css" />
        <script type="text/javascript" src="/static/js/prototype.js"></script>
        <script type="text/javascript" src="/static/js/openid-prototype.js"></script>
        <script type="text/javascript" src="/static/js/openid-en.js"></script>
        <script type="text/javascript">
                document.observe('dom:loaded', function() {
                        openid.init('openid_identifier');
                });
        </script>
        <!-- /Simple OpenID Selector -->
        <style type="text/css">
                /* Basic page formatting */
                body {
                        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
                }
        </style>
</head>

<body>
        <h2>Please Select Your Provider for Login</h2>
        <p>Select your identity provider from the list below. You will be sent there to log in and returned here as an identified user. There are no registration forms for this website or extra passwords to remember. </p>
{% if form.errors %}
<p class="errors">Please correct errors below:<br />
    {% if form.openid_identifier.errors %}
    <span class="error">{{ form.openid_identifier.errors|join:", " }}</span>
    {% endif %}
    {% if form.next.errors %}
    <span class="error">{{ form.next.errors|join:", " }}</span>
    {% endif %}
</p>
{% endif %}
        <br/>
        <!-- Simple OpenID Selector -->
        <form action="{{ action }}" name="fopenid" method="post" id="openid_form">
          {% csrf_token %}
                <input type="hidden" name="action" value="verify" />
                <fieldset>
                        <legend>Sign-in or Create New Account</legend>
                        <div id="openid_choice">
                                <p>Please click your account provider:</p>
                                <div id="openid_btns"></div>
                        </div>
                        <div id="openid_input_area">
                                <input id="openid_identifier" name="openid_identifier" type="text" maxlength="255" value="http://" />
                                <input id="openid_submit" type="submit" name="bsignin" value="Sign-In" />
                        </div>
                        <noscript>
                        <p>You need javascript and cookies enabled and an OpenID to use this site.  You are using a browser that does not support javascript or has javascript turned off.</p>
                        </noscript>
                </fieldset>
       </form>
        <!-- /Simple OpenID Selector -->
</body>
</html>

Есть идеи, в чем может быть проблема?Я думал, что это может включать в себя именование элементов формы, но я думал, что сохранил оригинальные идентификаторы.Я изменил имя формы текстового поля.

Кажется, это должно быть решенной проблемой, чтобы я мог просто скачать версию openid-selector, настроенную для django.Но я не мог найти один.Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 04 мая 2011

Мне удалось исправить проблему неактивности кнопки Google / Yahoo в openid-prototype.js, немного изменив обработку отправки формы следующим образом:

ШАГ 1: В init () openid-prototype.js приблизительно строка 47, изменить

$('openid_form').submit=this.submit

до

$('openid_form').onsubmit=this.submit

[Предыдущая настройка в ШАГЕ 1, казалось, вызывала странное поведение при одиночном шаге. Однако функция this.submit === openid.submit теперь вызывается только тогда, когда есть кнопка отправки, на которую можно нажать. Чтобы сохранить исходный интерфейс без добавления кнопки, я изменил процедуру входа для простых конечных точек для вызова обеих функций в ШАГЕ 2]

ШАГ 2: В signin () openid-prototype.js ок, строка 95, изменить

if (!onload) {$('openid_form').submit();}

до

if (!onload) {if (this.submit()){$('openid_form').submit();}}}

После внесения этих двух изменений все заработало. Я могу нажать на Google или Yahoo, и форма openid будет помещена в представление обработки формы в django-openid-auth

...