【问题标题】:Where do you run openid selector generate-sprite.js你在哪里运行 openid 选择器 generate-sprite.js
【发布时间】:2012-04-27 16:38:13
【问题描述】:

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。问题出在显示的提供程序图标中。它们总是按顺序显示; Google、Yahoo、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,它会在单击选择时破坏功能box 什么都不做。如果我删除第一个 openid.signin,行为不会改变。有人知道如何修改此代码块,以便在不破坏功能的情况下显示正确的图标吗?

深入挖掘发现Opened-jquery.js从opened-providers-en.png中提取了provider图片。当您编辑 openid-en.js providers_large 时,您必须更新 opens-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 设置中执行此操作。

【问题讨论】:

  • 我认为您必须通过 openid_choice classopenid_btns id 代码查看。我的想法是那些负责显示提供者列表及其按钮的人。试试看吧。
  • 看透到底是什么意思。我正在查看 open-en.js 和 openid-jquery.js 中的所有代码,并删除了对 google、yahoo 和 aol 的所有引用,但它们仍然出现。即使 myopenid 是我在 providers_large 下指定的那个,myopenid 也没有。如果我删除 href="javascript:openid.signin(\'' + box_id + '\'); 在 openid-jquery.js 中,我会留下两个空白框。你有任何具体信息。通用答案是'没用,我自己做?
  • &lt;div class="openid_choice"&gt; &lt;p&gt; Please click your account provider:&lt;/p&gt; &lt;div id="openid_btns"&gt; &lt;/div&gt; &lt;/div&gt; 查看使用 id="openid_btns" 填充 div 的脚本,并从中删除 google。
  • 我已经在整个解决方案中搜索了 _btn。真的不是问题。正如我所说,我已经从整个解决方案中删除了对 Google 的所有引用。与 openid-jquery.js 中的 href="javascript:openid.signin(\'' + box_id + '\'); 有关。请参阅我更新的问题。
  • 嗯,是的,但是如何?我想通了,看看我的答案。

标签: jquery openid dotnetopenauth


【解决方案1】:

回答

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

另见WScript is undefined

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多