簡體   English   中英

身份驗證后運行Javascript,而不是重定向

[英]Run Javascript after authentication instead of redirecting

簡短版:收到AJAX ASP.NET成員身份驗證響應后,留在同一頁上以運行第二個AJAX調用的最佳方法是什么?

長版:想象一個基於Web的ASP.NET MVC內置的Paint程序。 用戶繪畫,在此期間用戶的會話已超時。 用戶單擊“保存”,並通過AJAX對話框提示,“您的會話已超時。請在下面輸入您的憑據”。 (有關如何進行AJAX身份驗證,請參閱使用ASP.NET MVC進行jQuery表單身份驗證。)輸入有效的憑據后,將對用戶進行重新身份驗證。

通常,在這一點上,用戶將被重定向到returnUrl ,如MVC的默認登錄方法簽名所示:

public ActionResult LogOn(LogOnModel model, string returnUrl)

但是,在這種情況下,我想保留在同一頁面上,而是對我的處理程序SaveArt()進行AJAX調用,該調用會將用戶的工作寫入數據庫。 我可以劫持returnUrl以使其包含我想調用的后續Javascript函數的名稱,但是我認為可以從客戶端執行它的唯一方法是使用可怕的eval ,這似乎並不安全。 是否有另一種方法可以完全AJAX化此過程? 在此處使用eval運行名稱由服務器返回的函數有什么危險?

如果您使用的是Ajax請求進行登錄,則可以使用Request.IsAjaxRequest()(或其他幾種方法之一)修改accountcontroller以檢測到它,並返回帶有登錄請求結果的json對象,而不是a重定向。 從那里,您只需要處理該對象即可顯示結果。

-修正答案-

您需要做的是在繼續執行您想做的事情之前檢查ajax調用的響應代碼。jQuery 1.5的ajax()方法允許您執行以下操作:

$.ajax({
  statusCode: {404: function() {
    alert('page not found');
  }
});

對於您的情況,如果確實使用了[Authorize]屬性,則必須處理401狀態代碼。 您可能會在哪里顯示登錄對話框。 實例化登錄對話框時,請傳入一個閉包,該閉包將再次調用SaveArt()函數。

希望這對您有幫助。

“乍得·魯伯特”答案是正確的。 但是,如果您不明白,請按照以下說明進行。

1)聲明一個使用參數通過身份驗證進行AJAX調用的javascript函數i)用戶名ii)密碼iii)回調函數

2)在AJAX調用的響應中,您可能知道驗證結果,無論user / psd是否正確。

3)如果通過驗證,則調用回調函數(回調函數不是,但是您的SAVE())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM