Sinatra/1.4.3 использовать Rack:: Session:: Предупреждение о cookie

мой код конфигурации

require 'sinatra'

#set :environment, :production
enable :sessions
enable :logging
set run: true

case
  when production?
    set port: 8081
  when development?
    require 'sinatra/reloader'
    require 'better_errors'
    use BetterErrors::Middleware
    BetterErrors.application_root = __dir__
end

use Rack::Session::Cookie, key: 'N&wedhSDF',
    domain: "localhost",
    path: '/',
    expire_after: 14400,
    secret: '*&(^B234'

get '/' do
  erb :hello
end

Он по-прежнему показывает предупреждение:

SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
This poses a security threat. It is strongly recommended that you
provide a secret to prevent exploits that may be possible from crafted
cookies. This will not be supported in future versions of Rack, and
future versions will even invalidate your existing user cookies.

но он не отображается при производстве

вопрос в том, почему он все еще показывает предупреждение, даже если Rack:: Session:: Cookie уже установлен?

Ответ 1

Вы используете оба

enable :sessions

который делает сеансы настройки cookie Sinatra, и

use Rack::Session::Cookie, ...

который также добавляет сеансы к вашему приложению, поэтому вы получаете два экземпляра Rack::Session::Cookie в стеке промежуточного программного обеспечения.

Предупреждение генерируется промежуточным программным обеспечением сеанса, включенным Sinatra. По умолчанию Sinatra не создает секрет сеанса при работе в среде разработки (в классическом режиме, по крайней мере, для модульных приложений), и поэтому Rack генерирует предупреждение в процессе разработки.

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

Чтобы избежать предупреждения, вы можете явно установить секрет для сеанса Sinatra с помощью опции session_secret:

enable :sessions
set :session_secret, '*&(^B234'

Вы также можете передать хэш-параметры в качестве аргумента при включении сеансов. Вместо enable :sessions выполните следующее:

set :sessions, key: 'N&wedhSDF',
  domain: "localhost",
  path: '/',
  expire_after: 14400,
  secret: '*&(^B234'