2008-10-10 34 views
8

Tôi muốn truy cập bí mật phiên Rails theo chương trình (Tôi đang sử dụng nó để tạo mã thông báo đăng nhập).Cách tốt nhất để đọc bí mật phiên Rails là gì?

Dưới đây là những gì tôi đã đưa ra:

ActionController::Base.session.first[:secret] 

này trả về bí mật phiên. Tuy nhiên, mỗi khi bạn gọi ActionController :: Base.session, nó sẽ thêm một mục khác vào một mảng để bạn kết thúc với một thứ như sau:

[{:session_key=>"_new_app_session", :secret=>"totally-secret-you-guys"}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}] 

Điều này khiến tôi không tốt.

Có cách nào tốt hơn để truy cập bí mật phiên không?

Trả lời

2
ActionController::Base.session_options_for(request,params[:action])[:secret] 
5

Xin cảm ơn, Jake.

Kể từ khi bí mật không thay đổi dựa trên các yêu cầu hoặc những hành động, điều này cũng làm việc:

ActionController::Base.session_options_for(nil,nil)[:secret] 
1

Đối với Rails 2.3, tôi đã sử dụng:

ActionController::Base.session_options[:secret] 
+0

Mát mẻ, trông đẹp hơn. Tôi sẽ phải cập nhật mã của chúng tôi khi chúng tôi nâng cấp. –

11

Đối Rails4

Rails.configuration.secret_token 
Rails.configuration.secret_key_base 

Đối với Rails3

Rails.configuration.secret_token 

Nhưng nếu vì Rails2.x, giống như Don Parish nêu

ActionController::Base.session_options[:secret] 
+0

Tôi nhận được không cho cả hai. Đây không phải là bình thường phải không? Tôi đã giới thiệu một tập tin 'config/secrets.yml' vài ngày trước, có lẽ nó không được đọc? –

+1

Các bí mật được thêm vào tệp đó có thể truy cập thông qua 'Rails.application.secrets'. – zenw0lf

0

Đối với Rails 3, Rails.configuration là cùng Rails.application.config, vì vậy Rails.configuration.secret_token hoạt động giống như những gì choonkeat cung cấp .

Các vấn đề liên quan