你在哪里运行openid选择器generate-sprite.js

时间:2012-04-27 16:38:14

标签: jquery openid dotnetopenauth

ASP.NET MVC3 Razor项目

尝试使用http://weblogs.asp.net/haithamkhedre/archive/2011/03/13/openid-authentication-with-asp-net-mvc3-dotnetopenauth-and-openid-selector.aspx

实施OpenID

我已将openid-en.js脚本编辑为:

var providers_large = {
  myopenid: {
    name: 'MyOpenID',
    label: 'Enter your MyOpenID username.',
    url: 'http://{username}.myopenid.com/'
  },
  openid: {
    name: 'OpenID',
    label: 'Enter your OpenID.',
    url: null
  }
};

删除所有引荐来自Google。我还删除了var providers_small部分,并在open-jqeury.js中引用它。

这是我的LogOn.cshtml中的表单

<form action="Authenticate?ReturnUrl=@HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"])" method="post" id="openid_form">
<input type="hidden" name="action" value="verify" />
<div>
    <fieldset>
        <legend>Agency use only</legend>
        <div class="openid_choice">
            <p>
                Please click your account provider:</p>
            <div id="openid_btns">
            </div>
        </div>
        <div id="openid_input_area">
            @Html.TextBox("openid_identifier")
            <input type="submit" value="Log On" />
        </div>

问题在于,无论我做什么,Google都会显示为第一个提供商,很多时候不会列出MyOpenID提供商(雅虎有时也会出现)。我尝试删除cookie和历史记录(从IE和手动在AppData \ Roaming ... \ Cookies子文件夹,AppData \ Local \等,重新启动Visual Studio,重新启动计算机等。我只想要MyOpenID提供程序我猜测openid-en.js已被保存到我找不到的地方。我在整个计算机上搜索了该文件并删除了临时文件夹中的所有文件。

任何帮助都将不胜感激。

进一步的故障排除后,我发现我只能使用MyOpenID。问题出在显示的提供者图标中。它们总是按顺序显示;谷歌,雅虎,Aol然后它将显示MyOpenID。因此,即使我在provider_large代码块中仅列出了MyOpenID,它也会将Google图标放在选择框中。单击Google图标将显示MyOpenId,因此它可以正常运行,但显然会让用户感到困惑。问题出在open-jquery.js

中的代码块中
getBoxHTML : function(box_id, provider, box_size, index) {
        if (this.no_sprite) {
            var image_ext = box_size == 'small' ? '.ico.gif' : '.gif';
            return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"'
                    + ' style="background: #FFF url(' + this.img_path + '../images.' + box_size + '/' + box_id + image_ext + ') no-repeat center center" '
                    + 'class="' + box_id + ' openid_' + box_size + '_btn"></a>';
        }
        var x = box_size == 'small' ? -index * 24 : -index * 100;
        var y = box_size == 'small' ? -60 : 0;
        return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"'
                + ' style="background: #FFF url(' + this.img_path + 'openid-providers-' + this.sprite + '.png); background-position: ' + x + 'px ' + y + 'px" '
                + 'class="' + box_id + ' openid_' + box_size + '_btn"></a>';
    },

如果我删除第二个---'“href =”javascript:openid.signin(\“'---选择块是空白但仍然指向MyOpenID,它会破坏功能,但点击选择如果我删除第一个openid.signin,行为不会改变。有人会知道如何修改这个代码块,以便它显示正确的图标而不会破坏功能吗?

深入挖掘并发现Opened-jquery.js从opens-providers-en.png中提取提供者图像。编辑openid-en.js providers_large时,必须更新opened-providers-en.png。你可以通过运行generate-sprite.js来实现这一点,它是openid select的一部分,需要ImageMagick。安装了两个并运行generate-sprite.js后,我收到“Microsoft JScript运行时错误:'WScript'未定义”错误。目前尚不清楚如何运行generate-sprite.js。如果我将它作为脚本包含在我的项目中,我就得到了 “Microsoft JScript运行时错误:'WScript'未定义”错误在generate-sprite.js的此部分代码中

var locale = 'en';
if (WScript.Arguments.length == 0) {
    // assuming english locale
} else {
    locale = WScript.Arguments(0);
} 

如何运行generate-sprite.js脚本?

任何javascript专家都可以告诉我如何在我的Win7和VS2010 Express设置上执行此操作。

1 个答案:

答案 0 :(得分:0)

答案

将openid-selector安装到文件夹中,并按照自述文件编辑generate-sprite.js。然后从该文件夹中的命令行运行wscript generate-sprite.exe。它将生成一个新的openid-provider-en.png。我将其复制到我的images文件夹中,MyOpenID选择器框中有MyOpenId图标,并将我连接到MyOpenId登录。

另见WScript is undefined