backbone.js-ユーザーがログインしているかどうかを処理する
-
24-10-2019 - |
質問
まず、アプリに提供される静的ページはログインページにする必要がありますか?
第二に、私のサーバーサイドコードは問題ありません(ユーザーが表示できないはずのデータは提供されません)。しかし、ユーザーがログインしていない場合、ログインフォームに戻るためにアプリにどのように知ることができますか?
解決
現在のユーザーがログインしているかどうかを確認するために静的ページ(index.php)が作成したクライアント側のコードがあるバックエンドコールがあります。バックエンド呼び出しがあるとしましょう。 api/auth/logged_in
HTTPステータスコードを返します 200
ユーザーがログインしている場合 400
それ以外の場合は(Cookieベースのセッションを使用):
appController.checkUser(function(isLoggedIn){
if(!isLoggedIn) {
window.location.hash = "login";
}
Backbone.history.start();
});
...
window.AppController = Backbone.Controller.extend({
checkUser: function(callback) {
var that = this;
$.ajax("api/auth/logged_in", {
type: "GET",
dataType: "json",
success: function() {
return callback(true);
},
error: function() {
return callback(false);
}
});
}
});
他のヒント
セッションコンセプトを使用して、ユーザーログイン状態を制御します。
私はこのようなセッションモデルとセッションコレクションを持っています:
SessionModel = Backbone.Model.extend({
defaults: {
sessionId: "",
userName: "",
password: "",
userId: ""
},
isAuthorized: function(){
return Boolean(this.get("sessionId"));
}
});
アプリの開始時に、グローバルに利用可能な変数、アクティブセッションを初期化します。開始時には、このセッションは不正であり、このモデルインスタンスへの拘束力のあるビューはそれに応じてレンダリングできます。ログインの試行時に、最初にセッションを無効にしてログアウトします。
logout = function(){
window.activeSession.id = "";
window.activeSession.clear();
}
これにより、ActiveSessionに耳を傾けるビューがトリガーされ、MainViewがログインモードになり、ログインプロンプトが表示されます。次に、ユーザーからユーザー名とパスワードを取得し、次のようなアクティブセッションに設定します。
login = function(userName, password){
window.activeSession.set(
{
userName: userName,
password: password
},{
silent:true
}
);
window.activeSession.save();
}
これにより、backbone.syncを介してサーバーへの更新がトリガーされます。サーバーには、ユーザー名とパスワードをチェックするようにセッションリソースポストアクションのセットアップがあります。有効な場合、セッションのユーザーの詳細に記入し、一意のセッションIDを設定してパスワードを削除してから結果を送り返します。
次に、私のbackbone.syncがセットアップされて、window.activesids of activessessionをサーバーに送信する任意のリクエストに追加します。セッションIDがサーバーで無効である場合、HTTP 401を送り返します。これにより、ログアウト()がトリガーされ、ログインプロンプトが表示されます。
まだこれを実装していないため、ロジックにエラーがある可能性がありますが、基本的にはこれがどのようにアプローチするかです。また、上記のコードは、もう少し処理ロジックが含まれているため、実際のコードではありませんが、それはその要点です。
これが非常に良いチュートリアルです http://clintberry.com/2012/backbone-js-apps-authentication-tutorial/
HTMLディスプレイを制御するだけでなく、表示データを制御する必要があると思います。ユーザーはFirefoxを使用してJavaScriptコードを変更できるためです。
詳細については、ユーザーがログインした後、データグリッドやツリーなどのページでコンポーネントにアクセスするたびにトークンを提供する必要があります。また、WebServiceはこのトークンをチェックします。トークンが間違っているか過去にユーザーデータを提供しない場合は、エラーメッセージを提供する必要があります。 FireBugを使用してJSコードを変更しても、ユーザーがセキュリティをクラックできないようにします。
それはあなたに役立つかもしれません。
私はあなたがこのサーバーの側面のみを行うべきだと思います...それをハッキングしたユニットを取得する可能性はたくさんあります、そしてあなたがそれに応答するある種の驚くべきAPIがない限り