PoliteCaptcha Https Issue MVC Razor

Я использую 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.

2 ответа

Решение

Вы требуете небезопасного контента от безопасного соединения, и это обычно настоятельно не рекомендуется.

Я проверил исходный код PoliteCaptcha и нет ссылки на файл JS; по этой причине это должно быть очень легко исправить.

Найдите свой скрипт скрипт и просто удалите префикс протокола.

Изменить это

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

К этому

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

Браузер автоматически определит используемый протокол и избавится от проблемы.

Вполне возможно, что вы находитесь за обратным прокси-сервером, и API, который RecaptchaControl использует для генерации скриптов, не обнаруживает 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.Replacing...

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

и в вашей форме

@Html.Raw(preventionFields)
Другие вопросы по тегам