2011-08-19 7 views
6

私はルビーオンレールを使って他の人が作ったウェブサイトを持っています。私は現在djangoアプリケーションを構築しています。djangoとRoR(レール上のルビー)を組み合せる

私はdjango上に構築されたサインインページを使ってサインインする必要があります。(これまでは簡単でしたが)サイドバーのリンクをRoRアプリケーションに追加する必要があります彼らは私のアプリに戻ってくることができるだろう)。

ユーザはdjangoアプリを「離れる」ことを知ってはいけません - その1つのウェブサイト - RoRアプリは同じように見え、同じ感じです。

A.私はこれをどのように行うことができますか?
B.彼らはdjangoアプリでサインインするので、セッションとすべてのユーザーのものはdjangoによって管理されます。 RoRアプリケーションにどのようにセッションを渡すことができますか? iframeを使うべきですか?
C. djangoのRoR URLへのリンクはどのように見えますか?

ありがとう!

答えて

2

ここでのベストプラクティスは、広告ネットワークが複数のプロパティにわたってどのように状態を共有しているかを調べることです。一般的に使用される方法の1つにトラッキングピクセルがあります。たとえば、あなたのDjangoアプリに埋め込み:

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

あなたのレールアプリがそのアドレスでセッションで応答することを確認してください。これは、レールドメイン上にセッションクッキーを確立します。

セキュリティのレイヤーを作成し、必要なセキュリティのレベルによって異なります。あなたは次のように、情報を渡すことができます:明らかに信じられないほど安全ではありません

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

が、それはあなたのアプリケーションに依存します。より安全な方法は次のようになります(いずれのデータベースの状態またはサーバ側アプリケーション呼び出しを介して)

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

そしてレールアプリDjangoのアプリケーションサーバ側に対してそのトークンを検証するメカニズムを有するであろう多くの作業が、より多くの安全です。

別の方法として、アプリケーションがルートドメインを共有している場合、ルートドメイン上の安全なCookieを使用して、アプリケーション間で情報を渡すことができます。たとえば、https://django.myapp.comはmyapp.comのクッキーを設定し、https://rails.myapp.comは「ユーザー名」のクッキーを探します。ルートドメインにワイルドカードSSL証明書が必要です。

もう1つの方法として、Railsアプリケーションへのリンクごとにトークンまたはログイン情報を渡し、同様の方法でハンドオフを認識してセッションを確立するbefore_filterを用意します。

+0

最初のソリューションは素晴らしいです!私が予想していたよりずっと簡単でした。ありがとう!!!私は他の読者のためにコメントしたいと思いますが、このの呼び出しに問題があることがわかったのは誰でもいつでもパスワードなしで新しいセッションを開始することができるからです!したがって、tパラメータ(MD5HashTokenHere)を追加するには、新しい制限付きのトークンが必要です。再びありがとう@ジョシュア - あなたは私を救った! – reakh

0

これがうまくいくかどうかはわかりませんが、2本のレールアプリを使用する前にこれを行いました。

Railsとdjangoアプリケーションのセッションキーが同じであることを確認してください。 Railsでは

は、それはおそらく次のようになります:

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

はジャンゴでは、簡単にGoogleはこれに私を導い:

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

は、私はそれらが同じで、一度考えて、 2つのアプリは同じセッションを共有します。

+0

私はRailsとDjangoが異なるセッションフォーマットとプロトコルを持っていると考えているので、セッションをネイティブに共有することはできません(2つのRailsアプリケーションが可能なように)。 – Joshua

関連する問題