Подтвердить что ты не робот

SSL с Ruby on Rails

Что мне нужно сделать, чтобы получить трафик на мой рубин в приложении rails для использования https? У меня установлен сертификат, и если я вручную набираю "https://" в адресной строке при доступе к сайту, появляется значок маленькой блокировки, но только вручную перейдите на сайт www.example-app.com в моем браузере, отправив трафик через http://.

Есть ли какая-то однострочная конфигурация или сложнее? Мне никогда не приходилось иметь дело с SSL раньше, поэтому извините меня, если я говорю, что не знаю, что происходит.

Я размещаю в MediaTemple в (gs), если это имеет значение, или у кого-либо есть опыт работы с такой настройкой.

4b9b3361

Ответ 1

Посмотрите ssl_requirement gem.

Он позволяет вам указывать в контроллерах, какие действия должны обслуживаться через https и какие действия можно обслуживать через https. Затем он позаботится о перенаправлении с http на https и наоборот.

Из документации:

class ApplicationController < ActiveRecord::Base
  include SslRequirement
end

class AccountController < ApplicationController
  ssl_required :signup, :payment
  ssl_allowed :index

  def signup
    # Non-SSL access will be redirected to SSL
  end

  def payment
    # Non-SSL access will be redirected to SSL
  end

  def index
    # This action will work either with or without SSL
  end

  def other
    # SSL access will be redirected to non-SSL
  end
end

Ответ 2

Ruby on Rails - это инфраструктура приложения, а не веб-сервер. Конфигурация HTTPS, которую вы должны изменить, находится в конфигурации вашего веб-сервера (Apache, nginx и т.д.).

Ответ 3

Это довольно легко, и для этого вам не нужен драгоценный камень. Я писал, как перенаправить без www в rails здесь. Перенаправление на https является (почти) точно таким же.

class ApplicationController < ActionController::Base
  before_filter :redirect_to_https

  def redirect_to_https
    redirect_to "https://example.com#{request.fullpath}" if !request.ssl? && request.host != "localhost"
  end
end

Примените свой before_filter на все, что вы хотите, чтобы убедиться, что оно находится за защитой SSL. Я обычно один для повторного использования кода и драгоценных камней, но это смехотворно просто. Подробнее о request.protocol. (Обратите внимание, что в среде Ruby 1.9.3/Rails 3.2 имя request.fullpath; в некоторых более ранних версиях оно было request.request_uri, см. Примечания к выпуску и т.д.).