-1

我正在使用 PoliteCaptcha,如下所示:

<div class="form-container"> 
@using (Html.BeginForm("LogOn", "Account", new { ReturnUrl = Request.QueryString["ReturnUrl"] }, FormMethod.Post, new { id = "formLogOn" }))
{
  @Html.TextBoxFor(model => model.UserId, new { id = "textBoxUserId", placeholder="Enter your username" })<br />
  @Html.ValidationMessageFor(model => model.UserId)<br />

  @Html.PasswordFor(model => model.Password, new { placeholder="Enter your password" })<br />
  @Html.ValidationMessageFor(model => model.Password)<br />

  @Html.SpamPreventionFields()

  <input type="submit" id="ButtonLogOn" value="LoginButton" class=" button" />
}
</div>
<div id="validationSummary">
    @Html.Partial("_AjaxValidationSummaryPartial")
</div>

@if (Model != null && !Model.ShowCatcha)
{
  @Html.SpamPreventionScript()
}

这工作正常,但当它在 https 域上上线时就不行了。我得到错误:

混合内容:“ https://www.domain.com/log?ReturnUrl=%2Fadmin ”页面是通过 HTTPS 加载的,但请求了不安全的脚本“ http://www.google.com/recaptcha/api/challenge ” ?k=6LcAAAAOQuMiKA-yCo4HZPp4gy-T0x7CaX '。此请求已被阻止;内容必须通过 HTTPS 提供。

4

2 回答 2

1

您需要来自安全连接的不安全内容,通常强烈建议不要这样做。

我检查了 PoliteCaptcha 源代码,没有引用 JS 文件;因此,它应该很容易修复。

找到您的脚本标签并简单地删除协议前缀。

改变这个

<script src="http://www.google.com/recaptcha.js

对此

<script src="//www.google.com/recaptcha.js

浏览器将自动找出要使用的协议,并摆脱问题。

于 2015-04-29T09:46:47.653 回答
0

您很可能在反向代理后面,并且 RecaptchaControl 用于生成脚本的 api 没有Context.Request.IsSecureConnection正确检测到。你能告诉我们什么价值Context.Request.IsSecureConnection回报?

https://code.google.com/p/recaptcha/source/browse/trunk/recaptcha-plugins/dotnet/library/RecaptchaControl.cs#358

@Html.SpamPreventionFields() 是一个 IHtmlString,因此您可以创建一个页面变量并对其执行一些 String.Replaceing...

@{
var preventionFields = Html.SpamPreventionFields().ToHtmlString().Replace("http:", "https:")
}

并以您的形式

@Html.Raw(preventionFields)
于 2015-05-04T00:16:36.173 回答