所以我尝试使用NerdDinner 2作为示例来实现OpenID。当您单击其中一个OpenID提供程序时,您会看到一个弹出窗口,如下面的屏幕截图所示。我已经正确设置了大部分底层代码,并且我的登录页面加载并显示三个提供程序按钮,但是当我单击它们时,没有弹出窗口。它什么都不做。没有JS错误,没有任何反应。我错过了什么?
我查看了NerdDinner代码,但我无法弄清楚是什么原因导致弹出窗口发生。我不一定需要有人告诉我我的应用程序有什么问题,我只需要知道我在NerdDinner应用程序中寻找的是什么导致它发生,所以我可以将它与我的进行比较。
我正在使用以下代码渲染按钮:
@model dynamic
@using DotNetOpenAuth.Mvc;
@using DotNetOpenAuth.OpenId.RelyingParty;
<div id="login-oauth">
<fieldset>
<legend>via 3rd Party (recommended)</legend>
@using (Html.BeginForm("LogOnPostAssertion", "Auth"))
{
@Html.Hidden("ReturnUrl", Request.QueryString["ReturnUrl"], new { id = "ReturnUrl" })
@Html.Hidden("openid_openidAuthData")
<div>
@MvcHtmlString.Create(Html.OpenIdSelector(new SelectorButton[] {
new SelectorProviderButton("https://me.yahoo.com/", Url.Content("~/Content/images/yahoo.gif")),
new SelectorProviderButton("https://www.google.com/accounts/o8/id", Url.Content("~/Content/images/google.gif")),
new SelectorOpenIdButton(Url.Content("~/Content/images/openid.gif")),
}))
<div class="helpDoc">
<p>
If you have logged in previously, click the same button you did last time!!
</p>
</div>
</div>
}
</fieldset>
</div>
@{
var options = new OpenIdSelector();
options.TextBox.LogOnText = "Log On";
}
@MvcHtmlString.Create(Html.OpenIdSelectorScripts(options, null))
编辑:这种情况发生在所有浏览器中,并且没有弹出窗口阻止程序。
答案 0 :(得分:2)
出于某种原因,在global.asax.cs中更改以下路由:
routes.MapRoute(
"OpenIdDiscover",
"Auth/Discover");
为:
routes.MapRoute(
"OpenIdDiscover",
"Auth/Discover",
new { controller = "Auth", action = "Discover" }
);
似乎解决了这个问题。不知道为什么,但用Firebug查看请求显示尝试访问此路由时出现500错误。