您正在製作SPA,因此我假設您想要保護的所有內容(您的數據)均通過您的WebAPI提供,並且您可以將您的Angular模板公開。
在這種情況下,您基本上可以忽略客戶端的身份驗證,並且僅對WebAPI的調用進行身份驗證。任何未經身份驗證,未經授權或來自過期會話的服務器調用均會返回HTTP 401,Angular可以通過重定向到登錄頁面來響應此HTTP 401。您可以使用HTTP Interceptor來簡化該代碼(這裏的示例從here中被盜)。
myapp.factory('myHttpResponseInterceptor',['$q','$location',function($q,$location){
return {
response: function(response){
return promise.then(
function success(response) {
return response;
},
function error(response) {
if(response.status === 401){
$location.path('/signin');
return $q.reject(response);
}
else{
return $q.reject(response);
}
});
}
}
}]);
//Http Intercpetor to check auth failures for xhr requests
myapp.config(['$httpProvider',function($httpProvider) {
$httpProvider.interceptors.push('myHttpResponseInterceptor');
}]);
另外,如果你知道你的服務器端的會話超時設置爲20分鐘,那麼你也可以使用一個HTTP攔截器來跟蹤你的最後一個HTTP請求的時間。當它達到19分鐘前,那麼你可以警告用戶,他們將在1分鐘內註銷,除非他們作出迴應,在這種情況下,你稱爲「保持活動」服務重置超時,否則在20分鐘重定向到會話過期頁面。所以不需要投票。
對於稍微好一些的用戶體驗,在每個視圖加載時,您可以對會話cookie的存在執行一些基本的客戶端檢查。如果它不存在(例如,它們已經從深層鏈接着陸),那麼您可以立即重定向到登錄而無需調用服務器。如果它確實存在,則照常進行,知道首次調用WebAPI將驗證它。
對我的問題downvote的任何解釋?有什麼不對? – KevinIsNowOnline
也許是低估,因爲它可以被解釋爲基於意見?不是我同意,對我來說似乎是一個合理的問題。 –