Сессия в Rails_API gem

Я использую камень rails_api в моем проекте. Я хочу добавить управление сеансом для аутентификации, но, похоже, сеанс не работает. Вот моя конфигурация в config/initializer/session_store.rb:

Pmcapi::Application.config.session_store :cookie_store, {

  key: '_pmcapi_session', 
  expire_after: 1.hour
}

Я добавил config.api_only = false в application.rb (Добавление хранилища сеансов cookie обратно в приложение Rails API)

и в моем session_controller я добавил сеанс для хранения токена

# session_controller.rb
def create
  #just to generate new token
  user.reset_sso_token!
  session[:token] ||= user.sso_token
  self.current_user = user
  redirect_to root_path
end

Когда в application_controller, я хочу получить доступ к session[:token], но результат nil:

# application_controller.rb
def authenticate_user!
  #puts("User Authentication")
  #puts(request.authorization)
  #puts(request)
  @user = User.authenticate_with_token(session[:token])
  #head :unauthorized unless @user.present?
  redirect_to sign_in_path if @user.nil?
end

Ответ 1

из того, что я вижу из вашей строки config.api_only = false, в основном это делает рельсы использовать полный стек, а не сохранять его тонким, что является основной причиной, по которой вы можете использовать rails-api. Поэтому я предлагаю попробовать что-то вроде

config.middleware.use Rack::Session::Cookie

в вашем прикладном контроллере.

Если это не сработает, я рекомендую обратить ваше внимание на Этот запрос на pull об управлении сеансом в стеке rails 4

Ответ 2

Pmcapi:: Application.config.session_store: cookie_store, ключ: '_pmcapi_session', expire_after: 1.hour вы можете попробовать это в config/initializer/session_store.rb

Ответ 3

Я всегда предпочитаю использовать хорошо поддерживаемые и документированные драгоценные камни, а не писать свой собственный код. Причины этого:

  • Это экономит ваше время.
  • Это экономит ваши деньги.
  • Это более удобно
  • Другие кодеры, которые работают над вашими проектами, скорее знакомы с тем, что вы внедрили.
  • Более безопасный, потому что (по крайней мере, в моем случае), многие люди с большим опытом, чем я, работали над ним в течение нескольких лет.

Со всем этим я настоятельно рекомендую вам использовать Devise или один из других хорошо зарекомендовавших себя камней аутентификации, а не Борьба с подобными вещами сама по себе.

Я нашел эту статью полезной

http://www.emilsoman.com/blog/2013/05/18/building-a-tested/