2013-09-24 109 views
11

Tôi đang sử dụng đá quý rails_api trong dự án của mình. Tôi muốn thêm quản lý phiên để xác thực, nhưng có vẻ như phiên không hoạt động. Dưới đây là cấu hình của tôi trong config/initializer/session_store.rb:Phiên trong đá quý Rails_API

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

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

tôi thêm config.api_only = false trong application.rb (Adding cookie session store back to Rails API app)

và trong session_controller của tôi, tôi đã thêm phiên để lưu trữ các thẻ

# 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 

Khi ở application_controller, tôi muốn truy cập session[:token] nhưng kết quả là 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

Tôi đang gặp vấn đề tương tự. Được thăng hạng để tăng phơi nhiễm. – sjmog

+0

Bạn đã giải quyết được sự cố chưa? https://github.com/rails-api/rails-api/pull/97 – enricostn

+0

Đồng thời để lại điều này để tham khảo: https://github.com/rails-api/rails-api/issues/73 – jottr

Trả lời

0

Pmcapi :: Application.config.session_store: cookie_store, phím: '_pmcapi_session', expire_after: 1.hour có thể giúp bạn thử điều này trong config/initializer/session_store.rb

1

từ những gì tôi có thể nhìn thấy từ dòng config.api_only = false của bạn về cơ bản điều này làm cho đường ray sử dụng toàn bộ đống hơn là giữ nó mỏng, đó là lý do chính bạn có thể sử dụng rails-api vì vậy, tôi khuyên bạn nên cố gắng một cái gì đó giống như

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

trong điều khiển ứng dụng của bạn.

Nếu điều đó không làm việc tôi khuyên bạn nên hút sự chú ý của bạn để This pull request about session management in the rails 4 stack

+0

Tôi sẽ thực hiện việc này một bước xa hơn: 'config.middleware.use ActionDispatch :: Cookies; config.middleware.use ActionDispatch :: Session :: CookieStore', và sau đó tất nhiên, bạn sẽ phải cấu hình cả hai - cho tôi biết nếu bạn muốn có một ví dụ về cấu hình chúng và tôi sẽ đăng nó trong một câu trả lời riêng biệt. Nếu bạn làm điều này, sẽ dễ dàng tích hợp 'devise' hơn. –

0

Tôi luôn luôn thích sử dụng đá quý cũng được hỗ trợ và tài liệu chứ không phải viết mã của riêng tôi. những lý do cho việc này là:

  1. Nó giúp bạn tiết kiệm thời gian
  2. Nó giúp bạn tiết kiệm tiền
  3. Nó là dễ bảo trì hơn
  4. lập trình khác người làm việc trên dự án của bạn nhiều khả năng sẽ được làm quen với những gì bạn đã thực hiện .
  5. Nó an toàn hơn vì (ít nhất là trong trường hợp của tôi) nhiều người hơn với nhiều kinh nghiệm hơn tôi có, đã làm việc trên nó trong một số năm.

Với tất cả những điều đó, tôi khuyên bạn nên sử dụng Devise hoặc một trong những đá quý xác thực được thiết lập tốt khác chứ không phải vật lộn với loại điều này một mình.

tôi tìm thấy bài viết này hữu ích

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