Проблемы интеграции селектора openId с Asp.Net MVC 2 - PullRequest
2 голосов
/ 30 ноября 2010

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

Проблема в том, что ни одно изображение с открытыми битами Id не отображается в том месте, куда оно должно идти, что, как я полагаю, является <div id="openid_btns"></div>. Мне кажется, это указывает на то, что функция, которая должна устанавливать содержимое этого div, не запускается.

Я подозревал сценарии.

Я добавил ссылки на сценарии на Site.Master, так как они указывают:

<script type="text/javascript" src="../../Scripts/jquery-1.4.1.min.js"></script>  
<script type="text/javascript" src="../../Scripts/openid-jquery.js"></script>  
<script type="text/javascript">
    $(document).ready(function () {
        alert("document ready"); // <- I added this to verfiy that this is being called
        openid.init('openid_identifier');
    });  
</script>  

и кажется, что она вызывает функцию на каждой странице (отображается предупреждение), и тогда, я полагаю, она должна вызвать функцию openid.init.

это определено в скрипте openid-jquery.js:

var openid = {    
version: '1.2', // version constant
demo: false,
demo_text: null,
cookie_expires: 6 * 30, // 6 months.
cookie_name: 'openid_provider',
cookie_path: '/',

img_path: '../images/',
lang: null, // language, is set in openid-jquery-<lang>.js
signin_text: null, // text on submit button on the form
input_id: null,
provider_url: null,
provider_id: null,
all_small: false, // output large providers w/ small icons
no_sprite: false, // don't use sprite image
image_title: '{provider}', // for image title

init: function (input_id) {
    alert("initialising");
    providers = $.extend({}, providers_large, providers_small);

    var openid_btns = $('#openid_btns');

    this.input_id = input_id;

    $('#openid_choice').show();
    $('#openid_input_area').empty();

    var i = 0;
    // add box for each provider
    for (id in providers_large) {
        if (this.all_small) {
            openid_btns.append(this.getBoxHTML(id, providers_large[id], 'small', i++));
        } else
            openid_btns.append(this.getBoxHTML(id, providers_large[id], 'large', i++));
    }
    if (providers_small) {
        openid_btns.append('<br/>');

        for (id in providers_small) {

            openid_btns.append(this.getBoxHTML(id, providers_small[id], 'small', i++));
        }
    }

    $('#openid_form').submit(this.submit);

    var box_id = this.readCookie();
    if (box_id) {
        this.signin(box_id, true);
    }

снова я добавил alert("initialising");, который, кажется, никогда не вызывается.

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

UPDATE:

в функции готовности документа я поменял порядок функций следующим образом:

<script type="text/javascript">
    $(document).ready(function () {            
        openid.init('openid_identifier');
        alert("document ready"); 
    });  
</script>  

и теперь предупреждение не поднимается. что это значит? что-то не так в другой функции? как я могу сказать, что это такое?

ОБНОВЛЕНИЕ 2:

Wierd. Если я переименую файл openid-jquery.js во что-то (вроде бы что-нибудь) в другом месте (например, openid-jquery.2.js), я смогу увидеть предупреждение из скрипта open id.

но похоже, что это предупреждение выполняется, а не следующая строка, поскольку, когда я добавляю другое изменение позже (т.е. после самой следующей строки), второе предупреждение никогда не появляется. не уверен, почему это было бы также.

ОБНОВЛЕНИЕ 3: После отладки в chrome проблема заключалась в том, что providers_large, providers_small не были определены и добавлено:

var providers_large;
var providers_small;

к началу скрипта позволил ему хотя бы запустить и показать предупреждения. но все еще нет изображений ... дальнейшее расследование, я думаю.

Ответы [ 3 ]

2 голосов
/ 30 ноября 2010

, поэтому кажется, что на шаге 4 инструкции его необходимо обновить, чтобы добавить информацию о поставщике английского javascript, в которой определен provider_large, например:

<script type="text/javascript" src="../../Scripts/jquery-1.4.1.min.js"></script>  
<script type="text/javascript" src="../../Scripts/openid-jquery.js"></script> 
<script type="text/javascript" src="../../Scripts/openid-jquery-en.js"></script>  
<script type="text/javascript">
    $(document).ready(function () {
        alert("document ready"); // <- I added this to verfiy that this is being called
        openid.init('openid_identifier');
    });  
</script>  
1 голос
/ 26 февраля 2011

Небольшое обновление для ответа Сэма выше для версии 1.3.

Разархивированные файлы:

C: \ Ла \ селектор OpenID-1.3 \ селектор OpenID \ JS \ OpenID-en.js

Тег сценария:

<script type="text/javascript" src="../../Scripts/openid-en.js"></script>

0 голосов
/ 23 сентября 2011

У меня была такая же проблема, проверьте ваш web.config и добавьте разрешение всем пользователям в эти новые каталоги, а затем работает

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