ASP.NET MVC3 Razor项目
实施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设置上执行此操作。
答案 0 :(得分:0)
答案
将openid-selector安装到文件夹中,并按照自述文件编辑generate-sprite.js。然后从该文件夹中的命令行运行wscript generate-sprite.exe。它将生成一个新的openid-provider-en.png。我将其复制到我的images文件夹中,MyOpenID选择器框中有MyOpenId图标,并将我连接到MyOpenId登录。