将openId选择器与Asp.Net MVC 2集成的问题

时间:2010-11-29 21:24:44

标签: javascript asp.net-mvc-2 openid-provider

我正在尝试使用openid选择器javascript库来允许OpenId登录网站。我按照this site上的说明进行操作,但我通常不是网络程序员而且它不起作用,我不确定原因。我确信它的东西相当微不足道,但我看不到它。

问题是没有带有开放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");

它应该调用这个函数吗?如何确定未调用此函数的原因?有什么想法吗?

更新:

在文档就绪函数中,我交换了函数的顺序,如下所示:

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

现在没有提出警报。这是什么意思?其他功能出了什么问题?我该怎么知道它是什么?

更新2:

奇怪。如果我将openid-jquery.js文件重命名为某个(看似没什么)其他东西(比如openid-jquery.2.js),那么我可以从open id脚本中看到警报。

但它似乎只是执行警报而不是下一行,因为当我稍后添加另一个更改时(即在下一行之后),从未看到第二个警报。不知道为什么会这样。

更新3: 在使用chrome进行调试之后,问题似乎是providers_large, providers_small未定义并添加:

var providers_large;
var providers_small;

到脚本的顶部允许它至少运行并显示警报。但仍然没有图像...我认为进一步的调查。

3 个答案:

答案 0 :(得分:2)

所以似乎在指令的第4步中需要更新它以添加定义provider_large的英语javascript提供者信息,如下所示:

<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 :(得分:1)

稍微更新Sam对1.3版本的回答。

解压缩文件:

C:\布拉赫\ OpenID的选择-1.3 \ OpenID的选择器\ JS \ OpenID的en.js

脚本标记:

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

答案 2 :(得分:0)

我遇到了同样的问题,检查你的web.config并向所有用户添加这些新目录的权限,然后工作