Сессия в 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/