私は ajax の専門家ではないので、より良い答えを探すのは難しいと思います。残りのサービス (ユーザー セッションの検証用) の呼び出しを含む別の ".js" ファイルを作成しようとしましたが、機能しません。
私の目標は、ビューを (MVC で) ロードする前にユーザー セッションを検証することです。データベースで特定のセッションを検証するロジックを使用する唯一の方法は、ajax を使用して URL 経由でレスト サービスを呼び出すことです。
このコードは (ホーム ビュー内で) うまく機能します。
<script type="text/javascript">
$(function () {
$.get('@Url.Action("GetSession", "Auth")', function (getdata) {
if (getdata.UserID && getdata.SessionID && getdata.SourceIP) {
$.post('http://website.com/Rest/Authenticate/ValidateUserSession', JSON.stringify(getdata), function (response) {
if (response == false) { window.location.replace('@Url.Action("SignUp", "Auth")'); }
});
} else {
window.location.replace('@Url.Action("SignUp", "Auth")');
}
});
});
</script>
<h2>
Home</h2>
@*The content here should not appear, unless session is validated.*@
唯一の問題は、検証のプロセスに 3 ~ 5 秒かかるため、検証が成功したかどうかに関係なく、ajax 呼び出しが結果を返す前にユーザーにホームページが表示されることです。検証/応答が返さfalse
れると、sigup ページにリダイレクトされます。
このプロセスのベストプラクティスが何であるかわかりません。今のところ、セッションが検証されない限り、ホーム ビューをユーザーに表示したくありません。うまく説明できれば幸いです。より良いアイデアがあれば提案してください。
追加情報:
可能であれば、私はこれをするのが好きです:
<script type="text/javascript">
if(!validated()){
window.location.replace('@Url.Action("SignUp", "Auth")');
}
</script>
<h2>
Home</h2>
@*The content here should not appear, unless session is validated.*@