仲間の友人の助けを借りて、このトピックから問題の解決策を見つけることができました:一度に1人のユーザーがアカウントを使用できるようにする再利用可能な方法
シングル ログイン コードを再利用できるようにするために、AuthorizeAttribute から継承し、カスタム AuthorizeCore メソッドを実装する SingleLogin クラスがあります。
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool isAuthorized = base.AuthorizeCore(httpContext);
if (isAuthorized)
{
int userId = (int)WebSecurity.CurrentUserId;
using (var db = new UsersContext())
{
if ((httpContext.Session.SessionID != db.getSessionId(userId))
|| db.getSessionId(userId) == null)
{
WebSecurity.Logout();
isAuthorized = false;
httpContext.Response.Redirect("/Home/Index");
}
}
}
return isAuthorized;
}
JsonResult アクションを除いて、すべて正常に動作します。
[HttpPost]
public JsonResult MessageSave(string message)
{
bool messageSaved = false;
int userId = (int)WebSecurity.CurrentUserId;
message = HttpUtility.HtmlEncode(message);
// Model method - adding chat log - db
db.addChatLog(message, userId);
messageSaved = true;
return Json(new { messageSaved = messageSaved });
}
このメソッドは、以下のコード例で確認できる Ajax POST 呼び出しによってトリガーされます。基本的な POST だけです。
編集 3 これらの画像を確認してください: http://imgur.com/a/Cjael ..うーん、POST がトリガーされると思いますが、$.ajax の前にテストしようとすると、アラートが機能しない理由がわかりません...応答でわかるように、ホーム/インデックスページを取得しますが、すぐにホーム/インデックスにリダイレクトされません (テキストはテキストボックス内にとどまり、ページは待機するだけです..)、リダイレクトするにはもう一度Enterキーを押す必要があります..非常に奇妙な。
EDIT2 ログアウトしても jQuery にアクセスできないようです。.js ファイル内にいくつかのアラートを入れました。
別の .js ファイルがあり、それをビューに として配置します<script src="~/Scripts/custom/homeChat.js"></script>
。View から HTML5 データを介して JS ファイルに Razor の値を渡します。
textBox 要素 #txtMsg が jQuery イベントをトリガーするため、ログアウトすると、おそらく textBox 要素が認識されなくなり、jQuery イベントがトリガーされませんか?
ビューで .js をトリガーする要素は次のとおりです。
@Html.TextBox("txtMsg")
JS:
$("#txtMsg").keypress(function (e) {
//when enter
if (e.which == 13) {
alert("ALERT DOESNT TRIGGER");
$.ajax({
type: "POST",
url: url,
data: JSON.stringify({ message: input }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
if (data.messageSaved) {
$("#txtMsg").val("");
}
else {
window.location.href = urlhome;
}
}
});
}
}
});
では、イベントに参加することさえできない場合、何か問題が発生したことをどうやって知ることができますか? 私はこれを持っていますが、私が正しく理解していれば、これが機能するためにjQueryイベント(私の場合は上記のjsコードの.keypress˙HandleUnauthorizedRequest
)に入ることができる必要があります。
編集:追加説明
それでは、シナリオを説明しましょう。Firefox からユーザー名「john」でログインし、chrome からユーザー名「john」で再度ログインすると、Firefox で次のアクションを実行すると、ログアウトされてホーム/インデックスにリダイレクトされます。これは、他の誰かが Chrome で新しいログインを行ったためです。 .
それは大丈夫です。もうログインしていないため、アクションが通常の ActionResult でビューを返す場合、ホーム/インデックスに通常どおりリダイレクトされます。
私が抱えている問題は、ページにAjax POSTを使用する他の機能があり、ログアウトしているため、そのJsonResultアクションにPOSTできないため、リダイレクトするエラーのコールバックを受け取ることさえできないことですホーム/インデックスへ。私は自分の JS にいくつかのアラートを入れましたが、そのページではもう許可されていないため、通常のアラート トリガーはありません。onEnter テキスト ボックスでホーム/インデックスにリダイレクトされるようにするには、Enter キーを 2 回押す必要があります。できることはそれだけですか?
このAJAXの問題に対する最善のアプローチに興味があります。どのように呼べばよいのかわかりませんが、前のトピックから読んだように、「AJAX タイムアウトの処理」と呼ばれていますか?
どうもありがとうございました。