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
возвращается?
@ Html.SpamPreventionFields () - это IHtmlString, поэтому вы можете просто создать переменную страницы и выполнить для нее некоторое String.Replacing...
@{
var preventionFields = Html.SpamPreventionFields().ToHtmlString().Replace("http:", "https:")
}
и в вашей форме
@Html.Raw(preventionFields)