Rails API gem中的Session

时间:2013-09-24 00:47:14

标签: ruby-on-rails session rails-api

我在我的项目中使用rails_api gem。我想添加会话管理进行身份验证,但似乎会话无效。以下是config/initializer/session_store.rb中的配置:

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

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

我在config.api_only = falseAdding cookie session store back to Rails API app

中添加了application.rb

在我的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

3 个答案:

答案 0 :(得分:2)

从我的config.api_only = false行我可以看到这基本上使得rails使用完整堆栈而不是保持苗条,这是你可以使用rails-api的主要原因所以我建议尝试类似的东西

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

在您的应用程序控制器中。

如果不起作用,我建议您注意This pull request about session management in the rails 4 stack

答案 1 :(得分:0)

Pmcapi :: Application.config.session_store:cookie_store,key:' _pmcapi_session',expire_after:1.hour 你可以在config / initializer / session_store.rb

中试试这个

答案 2 :(得分:0)

我总是喜欢使用支持良好且有文档记录的宝石,而不是编写我自己的代码。原因是:

  1. 节省您的时间
  2. 为您省钱
  3. 更易于维护
  4. 其他参与您项目的程序员更可能熟悉您已实施的内容。
  5. 它更安全,因为(至少在我的情况下)有更多的人比我更有经验,多年来一直在努力。
  6. 尽管如此,我强烈建议您使用Devise或其他一些成熟的身份验证宝石,而不是单独与这种事情搏斗。

    我发现这篇文章很有用

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