【问题标题】:dotnetopenauth and ajax formsdotnetopenauth 和 ajax 表单
【发布时间】:2010-08-02 11:45:06
【问题描述】:

我正在尝试使用 Google 帐户以及 ASP.NET MVC 2 框架和 DotNetOpenAuth 库实现 openId 登录。

以下代码用于渲染登录按钮:

<% using (Html.BeginForm("LogOnPostAssertion", "Authentication", FormMethod.Post, new { target = "_top" }))
{ %>




新的 SelectorProviderButton("https://www.google.com/accounts/o8/id", AppHelper.ImageUrl("login/google.gif")),
新的 SelectorOpenIdButton(Url.Content("~/Content/google.gif")) }) %>


标签: ajax asp.net-mvc-2 dotnetopenauth


【解决方案1】:

会不会是因为你切换到 AJAX 的时候没有保留 POST HTTP 方法?

当我尝试用这个替换 Html.BeginForm 行时,它起作用了:

<% using (Ajax.BeginForm("LogOnPostAssertion", "Auth", new AjaxOptions { HttpMethod = "POST" })) { %>

通过在 LogOnPostAssertion 操作上设置断点,我看到它确实有效。但是动作本身需要调整为不发送重定向,而是发送任何合适的更新脚本。

【讨论】:

  • 在我的情况下,应该从动态加载内容的弹出对话框调用该方法。所以过程是: 1.用户点击登录链接。 2. AJAX 调用使站点和加载登录表单。表单在隐藏的 div 中加载,并向用户显示弹出窗口。 3. 用户点击谷歌图标。窗口出现,提示输入凭据。 4. 用户输入凭据。表格已关闭。应该提交表格,但在我的情况下没有发生。这可能是因为ajax加载。
  • 我还注意到一些有趣的事情。 1. Javascript函数'postLoginAssertion'负责表单提交,但在我的例子中没有调用它。 2. 当 SelectorOpenId 按钮被渲染时,它有一个带有 href="#" 的链接。我想知道为什么锚会出现在那里?这似乎导致我的网站在我使用锚点保存历史记录时重定向到主页。
  • 我在这里使用href="#" 以便(我记得)浏览器将这些A 标签视为链接,尽管它们调用javascript 而不是跳转到新页面。您的流程听起来与我尝试和看到的工作没有太大不同。也许您可以检查 javascript 运行时错误以查看 postLoginAssertion 是否由于较早的失败而未被调用?
  • 好的。我终于解决了这个问题,它现在可以工作了。你是对的,问题出在我的脚本中。我唯一的问题是,当打开 Google 寡妇时,我经常会在警报 TypeError: Object expected 中看到错误。但登录已成功处理。我想知道为什么会出现这个错误?在此错误之后,我的站点代码中有错误,即 li.loginBackground() 方法未定义。这个方法是在哪里声明的?
  • OpenIdSelector.js 文件在选择器的每个按钮上定义了li.loginBackground。我不知道它是否相关,但我注意到您的 ASPX 代码添加了一个 Google OP 按钮和一个带有 Google 徽标的 OpenID 按钮。这对我来说似乎是错误的。通常,OpenID 按钮使用 OpenID 徽标,因此用户可以区分这两个按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2011-06-10
相关资源
最近更新 更多