Как проходить сеансы в Синатре - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь реализовать сеансы в моем процессе входа в систему, но сеанс не передается с маршрута на маршрут, пока я использую set :session_secret, SecureRandom.hex(64), но если я использую set :session_secret, "secret", он работает нормально.

Насколько я понимаю, я не должен этого делать, потому что это не очень безопасно.

Есть ли способ использовать set :session_secret, SecureRandom.hex(64 и передавать его с маршрута на маршрут? Или мне нужно использовать set :session_secret, "secret"?

class MainController < Sinatra::Base
    register Sinatra::ActiveRecordExtension
    enable :sessions
    #set :session_secret, SecureRandom.hex(64)
    #set :session_secret, "secret"
    #set :session_secret, "secretsession"
    set :session_secret, "f650ed69344bab0084199bb8cc9aa5a1bd6756c3b57ad67023255af0fc3795057e"
    set :views, Proc.new { File.join(root, "../views/") }


get '/sessions_set' do 
        session[:foo] = 'hello'
        if session[:foo] == 'hello'
            binding.pry
            redirect '/fetch'
          else
            "Session value has not been set!"
          end
    end 

    get '/fetch' do
        binding.pry
        "You did it! session[:foo] value: #{session[:foo]}.\nMove on to Part II of this lab at '/second_exercise' "
      end


end 

1 Ответ

0 голосов
/ 26 июня 2020

Если вы запускаете это каждый раз, он будет каждый раз создавать другой случайный код, что существенно сделает вашу сессию непригодной для использования. Вам нужно будет каким-то образом запустить этот фрагмент кода при запуске, чтобы он заработал.

:session_secret, SecureRandom.hex(64)

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

...