11

I am using the rails_api gem in my project. I want to add session management for authentication, but it seems the session does not work. Here is my configuration in config/initializer/session_store.rb:

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

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

I added config.api_only = false in application.rb (Adding cookie session store back to Rails API app)

and in my session_controller, I added session to store the token

# 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

When in application_controller, I want to access session[:token] but the result is 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
4

3 回答 3

2

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

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

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

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

于 2015-01-13T11:56:27.183 回答
0

我总是更喜欢使用得到良好支持和记录的 gem,而不是编写自己的代码。原因是:

  1. 它可以节省您的时间
  2. 它可以为您省钱
  3. 它更易于维护
  4. 从事您项目的其他编码人员更可能熟悉您已实现的内容。
  5. 它更安全,因为(至少在我的情况下)比我有更多经验的人已经为此工作了很多年。

有了所有这些,我强烈建议您使用Devise或其他成熟的身份验证 gem 之一,而不是自己处理这种事情。

我发现这篇文章很有帮助

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

于 2015-04-07T06:58:16.397 回答
0

Pmcapi::Application.config.session_store :cookie_store, key: '_pmcapi_session', expire_after: 1.hour 你能在 config/initializer/session_store.rb 中试试这个吗

于 2014-11-17T10:53:10.093 回答