2017-12-18 208 views
-2

我的目標是如果用戶點擊他所在的頁面鏈接(或張貼表單),將彈出一個模式窗口未授權的,因爲它比重定向到通用錯誤頁面更好的用戶體驗。當未經授權導航到頁面時,大多數不冒險的方式使模式窗口彈出

我所做的就是實現

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     // ... 
    } 

,這樣,如果該請求是一個非AJAX請求,然後將其重定向到同一個頁面(給住在同一頁上的錯覺),並追加查詢字符串與"forbiddenRedirect=true"然後JavaScript打開錯誤模式。我試圖想出一個比使用查詢字符串更好的方法。據我所知,JavaScript無法訪問響應頭文件,只能訪問URL。這就是爲什麼我使用查詢字符串解決方案。但也許在MVC中,我可以通過某種方式重定向並傳遞基本控制器可以識別的某種令牌,然後將其添加到查看包中,如ViewBag.IsRedirectFromUnauthorizedAction = true

有什麼建議嗎?

回答

0

用戶應該永遠不要進入他們可以發佈數據而無需通過認證和授權的頁面!

如果您的用戶可以獲取他們可以發佈信息的表單(讓用戶配置文件頁面放手),那麼他們應該在他們甚至可以到達之前進行身份驗證。因此,例如,您將引導用戶前登錄頁面之前,您允許他們訪問編輯配置文件頁面。一旦他們對自己進行了身份驗證,並且已經檢查他們有權在特定頁面上執行POST,則可以使用然後向他們提供表單。

但是如果他們的會話超時呢?

在用戶進行身份驗證,並得到該頁面,那麼他們的會話超時的情況下,你應該將其重定向回登錄頁面提示輸入他們的憑據,他們再次拒絕他們的崗位要求。在理想情況下,您應該每隔30秒左右在後臺運行一次AJAX功能。如果他們閒置了一段時間(比如說5分鐘),那麼您可以假設他們關閉了瀏覽器或將他們的電腦無人看管。此時,可以詢問用戶(通過模態窗口)他們是否希望保持登錄或在30秒內註銷。如果他們點擊保持登錄按鈕,讓他們成爲。如果他們沒有回答,則可以將其註銷並自動將其重定向回登錄頁面。