2013-09-24 22 views
11

我在我的項目中使用了rails_api gem。我想爲認證添加會話管理,但似乎會話不起作用。下面是我在config/initializer/session_store.rb配置:Rails_API中的會話gem

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

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

application.rbAdding cookie session store back to Rails API app

,並添加config.api_only = false在我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 
+0

我有同樣的問題。 Upvoted增加曝光。 – sjmog

+0

你解決了這個問題嗎? https://github.com/rails-api/rails-api/pull/97 – enricostn

+0

也請留下以供參考:https://github.com/rails-api/rails-api/issues/73 – jottr

回答

0

Pmcapi :: Application.config.session_store:cookie_store,鍵: '_pmcapi_session',expire_after:1.hour 可以試一下這個在配置/初始化/ session_store.rb

1

從我可以看到從您config.api_only = false線這基本上使得軌道使用完整的堆棧,而不是保持它的纖薄,這是你可以使用rails-api所以我建議嘗試一些主要的原因類似

config.middleware.use Rack::Session::Cookie 
在應用程序控制器

如果不工作,我建議你注意This pull request about session management in the rails 4 stack

+0

我會拿這個更進一步:'config.middleware.use ActionDispatch :: Cookies; config.middleware.use ActionDispatch :: Session :: CookieStore',當然,你必須配置兩者 - 讓我知道你是否想要一個配置它們的例子,我會在一個單獨的答案中發佈它。如果你這樣做,集成'devise'會更容易。 –

0

我總是喜歡用很好的支持和記載的寶石,而不是我自己寫的代碼。這種情況的原因是:

  1. 它可以節省您的時間
  2. 這樣可以節省你的錢
  3. 更易於維護
  4. 誰對你的項目工作的其他程序員會更容易熟悉您已經實現了什麼。
  5. 它更安全,因爲(至少在我的情況下)比我有更多經驗的人多年來一直在努力。

所有這一切,我強烈建議您使用Devise或其他已確立的認證寶石之一,而不是與你自己搏鬥這種事情。

我發現這篇文章有幫助

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