2008-12-18 28 views
17

Tôi đã đấu tranh với điều này trong một thời gian và không thể tìm một giải pháp. Tôi cần người dùng có thể xem nhiều tên miền cấp cao nhất với một lần đăng nhập duy nhất.Rails - Nhiều tên miền cấp cao nhất và một phiên/cookie

Sự hiểu biết của tôi là điều này cần phải được đặt trong environment.rb và được gọi với before_dispatch. Đây là những gì tôi đã đưa ra:

require 'activesupport' 
require 'dispatcher' 
module ActionController 
    class Dispatcher 

     def set_session_domain 
     ActionController::Base.session_options.update :session_domain => "#{@request.host}" 
     end 

     before_dispatch :set_session_domain 
    end 
end 

Tuy nhiên, điều này dường như không thể làm việc khi tôi cố gắng và kéo giá trị từ session[:session_domain].

Bất kỳ trợ giúp nào được đánh giá cao.

+0

phản hồi của zenazn về các giới hạn của cookie là một điều tốt. Bất kỳ ai cũng có thể cung cấp ví dụ cho một lần đăng nhập trên các tên miền phụ, ít nhất phải không? Cookie nên hỗ trợ điều đó. Làm thế nào để Rails? –

Trả lời

0

Câu hỏi của bạn không thực sự đủ chính xác IMHO. Bạn có muốn một cookie duy nhất cho tất cả các ứng dụng Rails bạn có hoặc là nó trong ngữ cảnh của một ứng dụng duy nhất? Nếu trước đây, bạn muốn xem xét các giải pháp bằng cách sử dụng phiên được cơ sở dữ liệu hỗ trợ hoặc điều gì đó dọc theo dòng RubyCAS để triển khai giao thức CAS.

6

Điều này hơi phức tạp một chút. Vì cookie chỉ có thể được gán cho (và được truy xuất từ) tên miền hiện tại ("forms.example.com", nói) và tên miền chính (".example.com", nhưng không phải là ".com"), nhưng KHÔNG cho các tên miền khác ("othersite.com"), bạn sẽ phải tìm cho mình một giải pháp khác. Điều này không liên quan gì đến Rails, nhưng với cách thức hoạt động của cookie.

CHỈNH SỬA: Phiên dựa trên một tay cầm dành riêng cho khách hàng, được lưu trữ trong cookie, đó là lý do tại sao các phiên cũng không hoạt động giữa nhiều miền.

This site có một giải pháp khả thi để tạo cookie đa miền và đó là cách sạch nhất mà tôi biết, mặc dù nó có thể có một số tác động bảo mật. Một phiên bản phức tạp hơn sẽ có các máy chủ giao tiếp trực tiếp thông qua một số kênh an toàn.

Nếu bạn đang tìm kiếm dịch vụ đăng nhập một lần có mục đích chung hơn, hãy thử triển khai một số hình thức OpenID.

0

Bạn có thể sẽ cần một cái gì đó giống như RubyCAS nếu bạn muốn xác thực trên các tên miền bất kể họ là cấp cao nhất hoặc tên miền phụ.

0

Cả Keltia và Zuk là đúng, trả lời là rubyCAS, Chúng tôi có làm hội nhập đó và nó cho phép

SSI - đăng nhập một lần -in Bạn đăng một trang web và bạn sẽ tự động được ký hợp đồng với người kia

SSO - Single Sign Out bạn đăng xuất khỏi một trang web và tự động bạn đăng xuất khỏi từ khác

Đối với chúng tôi đây là một giải pháp đã được chứng minh và không phải là một trong những khó khăn để thực hiện

chúng tôi đang sử dụng nó trong http://www.cabslk.com và www.ticketslk.com

cổ vũ, Sameera

2

Đối với tên miền phụ trong Rails 2,3

ActionController::Base.session = { :domain => ".mydomain.com" } 

Đối với tên miền cấp cao cố gắng this middleware.

Tôi đã chơi với phần mềm trung gian ở trên vào lúc này và nó không hoạt động như mong đợi. Nếu bạn sử dụng phần mềm trung gian, bạn không cần mã trên vì nó cũng xử lý các miền phụ.

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