2010-11-29 3 views
2

J'essaie d'utiliser la bibliothèque openid selector javascript pour autoriser la connexion OpenId à un site Web. Je suis les instructions sur this site, mais je ne suis pas habituellement un programmeur de Web et son ne fonctionne pas et je ne suis pas certain pourquoi. Je suis sûr que c'est quelque chose d'assez trivial mais je ne peux pas le voir.Problèmes d'intégration du sélecteur openId avec Asp.Net MVC 2

Le problème est qu'aucune image avec les bits Id ouverts sur elle est rendu à l'endroit où il devrait aller, ce qui est le <div id="openid_btns"></div> je suppose. Cela semble m'indiquer que la fonction qui est censée définir le contenu de cette div n'est pas exécutée.

J'ai suspecté les scripts.

J'ai ajouté les références de script à l'Site.master comme il indique:

<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> 

et il semble appeler la fonction sur chaque page (l'alerte est affichée) et il devrait alors, je suppose, appelez la fonction openid.init.

cela est défini dans le script 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); 
    } 

à nouveau j'ai ajouté le alert("initialising"); qui semble ne jamais être appelé.

Devrait-il appeler cette fonction? Comment puis-je déterminer pourquoi cette fonction n'est pas appelée? Des idées?

MISE À JOUR:

dans le document fonction prêt i troqué l'ordre des fonctions comme ceci:

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

et maintenant l'alerte ne se pose pas. Qu'est-ce que ça veut dire? Quelque chose ne va pas dans l'autre fonction? comment puis-je dire ce que c'est?

MISE À JOUR 2:

Wierd. Si je renomme le fichier openid-jquery.js en quelque chose (apparemment n'importe quoi) (comme openid-jquery.2.js) alors je peux voir l'alerte à partir du script open id.

mais il semble seulement exécuter l'alerte et non la ligne suivante comme lorsque j'ajoute un autre changement plus tard (c'est-à-dire après la ligne suivante) la 2ème alerte n'est jamais vue. Je ne sais pas pourquoi ce serait non plus.

MISE À JOUR 3: Après le débogage en chrome, il semble que le problème était que providers_large, providers_small ne sont pas définis et en ajoutant:

var providers_large; 
var providers_small; 

au début du script lui a permis d'au moins courir et montrer les alertes. mais toujours pas d'images ... une enquête plus poussée je pense.

Répondre

2

il semble donc que l'étape 4 des instructions qu'il doit être mis à jour pour ajouter les informations fournisseur javascript anglais, ce qui est où le provider_large est défini, comme ceci:

<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

mise à jour légère à la réponse de Sam ci-dessus pour la version 1.3.

Unzipped Fichiers:

C: \ Blah \ openid-sélecteur 1.3 \ Openid sélecteur \ js \ OpenID en.js

Script Tag:

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

0

J'ai eu le même problème, vérifiez votre web.config et ajouter la permission à tous les utilisateurs de ces nouveaux répertoires, puis fonctionne