2011-08-19 3 views
6

Tôi có một trang web được xây dựng bởi một người khác với ruby-on-rails, và bây giờ tôi đang xây dựng một ứng dụng django.Tích hợp django và RoR (ruby trên đường ray)

Tôi cần người dùng của mình đăng nhập bằng trang đăng nhập được tạo trên django và lướt các trang django của tôi (cho đến nay - dễ làm) nhưng tôi cũng cần thêm liên kết trên thanh bên vào ứng dụng RoR đó (và từ ở đó họ sẽ có thể quay lại ứng dụng của tôi).

Người dùng không nên biết rằng họ đang "rời" ứng dụng django - cho họ một trang web - ứng dụng RoR đó có giao diện và cảm nhận tương tự cho họ.

A. Làm thế nào tôi có thể làm điều này? B. Họ đăng nhập bằng ứng dụng django để các phiên và tất cả nội dung của người dùng sẽ được quản lý bởi django. Làm thế nào tôi có thể "vượt qua" phiên cho ứng dụng RoR? Tôi có nên sử dụng iframe không ??
C. Các liên kết trong django đến url RoR trông như thế nào?

Cảm ơn các bạn!

Trả lời

2

Cách tốt nhất ở đây là xem xét cách mạng quảng cáo chia sẻ trạng thái trên nhiều thuộc tính. Một phương pháp thường được sử dụng là pixel theo dõi. Ví dụ: trong ứng dụng Django của bạn, hãy nhúng:

<img src="http://myrailsapp/mysession_creator" /> 

Đảm bảo rằng ứng dụng đường ray của bạn phản hồi tại địa chỉ đó với một phiên. Điều đó sẽ thiết lập một cookie phiên trên tên miền ray.

Bây giờ để bảo mật lớp, và tùy thuộc vào mức độ bảo mật bạn cần. Bạn có thể chuyển thông tin, như:

<img src="http://myrailsapp/mysession_creator?user=myUserName" /> 

Rõ ràng là không an toàn, nhưng tùy thuộc vào ứng dụng của bạn. Một phương pháp an toàn hơn sẽ là: (. Hoặc thông qua trạng thái cơ sở dữ liệu hoặc một máy chủ cuộc gọi ứng dụng bên)

<img src="http://myrailsapp/mysession_creator?t=<MD5HashTokenHere>" /> 

Sau đó, Rails ứng dụng sẽ có một cơ chế chứng thực rằng dấu hiệu chống lại phía máy chủ ứng dụng Django làm việc nhiều hơn, nhưng nhiều hơn đảm bảo.

Một phương pháp khác, nếu ứng dụng của bạn chia sẻ miền gốc, bạn có thể sử dụng cookie an toàn trên miền gốc để chuyển thông tin giữa các ứng dụng. Ví dụ: https://django.myapp.com đặt cookie myapp.com và https://rails.myapp.com biết tìm cookie "tên người dùng". Yêu cầu chứng chỉ SSL ký tự đại diện trên miền gốc.

Tùy chọn khác là chuyển mã thông báo hoặc thông tin đăng nhập với mọi liên kết đến ứng dụng Rails và có before_filter nhận ra tay và thiết lập phiên theo cách tương tự.

+0

Giải pháp đầu tiên của bạn hoạt động tuyệt vời! Dễ dàng hơn nhiều so với tôi mong đợi. Cảm ơn!!! Tôi muốn bình luận cho độc giả khác, mặc dù có thể là rõ ràng, rằng tôi nhận ra có một vấn đề với cuộc gọi này vì nó có thể được sử dụng bất cứ lúc nào bởi bất cứ ai để bắt đầu một phiên mới trong ứng dụng đường ray mà không cần mật khẩu! Do đó, việc thêm tham số t (MD5HashTokenHere) là cần thiết với một mã thông báo mới và giới hạn thời gian. Cảm ơn một lần nữa @Joshua - bạn đã cứu tôi !! – reakh

0

Tôi không chắc chắn nếu điều này sẽ làm việc, nhưng chúng tôi đã làm điều này trước khi sử dụng 2 ứng dụng đường ray.

Đảm bảo các khóa phiên trong Rails và trong ứng dụng django của bạn giống nhau.

Trong Rails, nó có lẽ sẽ giống như thế này:

ActionController::Base.session = { 
    :key   => '_my_session_key', 
    :secret  => '_my_session_secret' 
} 

Trong Django, một google nhanh chóng dẫn tôi đến đây:

https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY

Tôi nghĩ rằng một khi những đều giống nhau, hai ứng dụng sẽ chia sẻ cùng một phiên.

+0

Pat, tôi tin rằng Rails và Django có các định dạng và giao thức phiên khác nhau, vì vậy họ không thể chia sẻ phiên gốc (như hai ứng dụng Rails có thể.) – Joshua