1

更新 - 2013-07-31

それで、これをやってのけるために私がしたことを簡単に更新します。効果的に機能するには、4 つの要素 (Marionette/Backbone のみ、セッション要求に応答する Web サービスが必要) が必要です。誰でも見られるように Gists を作成しました。要点を自由に更新してください。バグがないことを確認して、コードをプルします。

jQuery、require.js、テキストのrequire.jsプラグイン、ハンドルバー、moment.jsを使用しています。main.js には、実行時にハンドルバーを HTML に埋め込む代わりに、ハンドルバーを使用してディスクまたはキャッシュからテンプレートをロードするためのすべてのフックが含まれており、テンプレートで momentjs を使用するためのヘルパーを提供します。ご不明な点がございましたら、お気軽に投稿してください。

要点: https://gist.github.com/dkleehammer/6126639

アップデート!!

私は実用的な解決策を思いついたと信じています。私はテストを続け、作成者に渡して、彼がそれを調べてブログに追加するかどうかを確認します. バックボーンと認証に関連する多くの質問を見てきましたが、これが他の人の助けになることを願っています.

オリジナル!!

サーバー側のセッション処理とバックボーン + マリオネットに問題があります。このアプリケーションのベースとなるセッション モデルがあります。セッションは、認証済みフラグ、セッション ID、ユーザー ID などのデータを運びます。

これをさまざまな方法で実行しようとしましたが、まだ 1 つの問題に遭遇します。サーバーが現在のセッションステータスで応答するのを待っている瞬間のタイミングの問題であり、ルーターはログインページに送信する必要があるか、特定の地域で表示する必要があるかを判断しようとしています. 認証されると (もちろんログイン後)、インデックス ハッシュタグに送信されますが、ページを更新すると、モデルは未定義として返され、ログイン ハッシュタグに戻ります。これは、レンダリング中にセッション モデル データを使用する他のすべての問題です。

marionette でサーバー側のセッション アプリケーションを実行する最良の方法は何ですか? バックボーン+マリオネットでルーティングとサーバー側セッションを使用する良い例はありますか?

4

3 に答える 3

1

興味のある方のために、最近の仕事に基づいて Backbone Marionette を使用したサーバー側セッション アプリケーションの動作例を考え出しました。

サンプルを実行するための手順を含むリポジトリ: https://github.com/michael-lee/loopback-example-backbone-marionette

この例のバックエンドでは、認証をサポートする Node.js サーバーである LoopBackJS を使用していますが、ログイン REST API を提供し、認証トークンを使用してデータ アクセスを保護する他のバックエンドでも問題ありません。ログインしているユーザーがいない場合、またはトークンの有効期限が切れている場合、バックエンドへの要求は HTTP 401 エラーで失敗します。

Marionette アプリは、ログイン応答で返されたトークンを保存し、後続のすべての要求でこのトークンを送信します。jquery.cookieを使用してトークンを永続化するため、ページのリロードやブラウザの再起動後も保持されます。アプリを開始する前に、まず有効なトークンが既にあるかどうかを確認します。次に、アプリとルーターを起動します。有効なトークンがある場合は、認証されたページに直接移動します。認証後、いつでも 401 エラーが発生した場合 (セッションの期限切れなど)、アプリは$.ajaxSetupを使用してエラーをインターセプトし、ユーザーをログイン ページに戻します。

于 2015-01-04T05:29:34.773 に答える
0

追加のajaxクエリを実行する代わりに、セッションデータ(認証済みフラグ、セッションID、ユーザーIDなど)をページに出力することで、これを解決します。

window.userdata = {"username":Marcus、 "password":'user_id':12343}'など。

スクリプトで使用した後、それを削除します。

于 2012-11-15T02:38:39.597 に答える
0

ajax jquery 関数とasync : falseオプションのおかげで、サーバーに同期要求を送信できます。

$.ajax
  ({
    type: "GET",
    url: "login.php",
    dataType: 'json',
    async: false,
    data: '{"username": "' + username + '", "password" : "' + password + '"}',
    success: function (){
      // go wherever you want...
    },
    error: function(){
      // go to login page
    }
}); 
于 2012-08-08T21:57:38.563 に答える