我正在尝试在我的项目中实现会话超时功能。当用户空闲而不使用网页时,我希望它发出一条提示消息,询问他们是否要继续,如果用户点击是,我想将其重新登录,因为这有助于重新生成Azure Adal令牌,如果他们这样说"不"我想将它们记录下来。
当我尝试登录时遇到错误,我遇到了一些错误。
这是我的源代码!!
计时器功能。
var idleTime = 0;
$(document).ready(function() {
//Increment the idle time counter every minute.
var idleInterval = setInterval(timerIncrement, 60000); // 1 minute
//Zero the idle timer on mouse movement.
$(this).mousemove(function(e) {
idleTime = 0;
});
$(this).keypress(function(e) {
idleTime = 0;
});
});
function timerIncrement() {
idleTime = idleTime + 1;
if (idleTime > 1) { // 20 minutes
window.confirm("Your Session Will Expire in 2 Minutes. Do you want to continue?");
//window.location.reload();
if (confirm == true) {
AuthenticationContext.prototype.login();
} else {
AuthenticationContext.prototype.logOut();
}
}
console.log(idleTime);
}
</script>
我的退出和登录功能
AuthenticationContext.prototype.logOut = function() {
this.clearCache();
var tenant = 'common';
var logout = '';
this._user = null;
if (this.config.tenant) {
tenant = this.config.tenant;
}
if (this.config.instance) {
this.instance = this.config.instance;
}
if (this.config.postLogoutRedirectUri) {
logout = 'post_logout_redirect_uri=' + encodeURIComponent(this.config.postLogoutRedirectUri);
}
var urlNavigate = this.instance + tenant + '/oauth2/logout?' + logout;
this._logstatus('Logout navigate to: ' + urlNavigate);
this.promptUser(urlNavigate);
};
登录功能
AuthenticationContext.prototype.login = function() {
// Token is not present and user needs to login
var expectedState = this._guid();
this.config.state = expectedState;
this._idTokenNonce = this._guid();
this._logstatus('Expected state: ' + expectedState + ' startPage:' + window.location);
this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST, window.location);
this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR, '');
this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN, expectedState);
this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN, this._idTokenNonce);
this._saveItem(this.CONSTANTS.STORAGE.FAILED_RENEW, '');
this._saveItem(this.CONSTANTS.STORAGE.ERROR, '');
this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION, '');
var urlNavigate = this._getNavigateUrl('id_token', null) + '&nonce=' + encodeURIComponent(this._idTokenNonce);
this.frameCallInProgress = false;
this._loginInProgress = true;
if (this.config.displayCall) {
// User defined way of handling the navigation
this.config.displayCall(urlNavigate);
} else {
this.promptUser(urlNavigate);
}
// callback from redirected page will receive fragment. It needs to call oauth2Callback
};
我收到清除缓存错误
Uncaught TypeError: Cannot read property 'STORAGE' of undefined
at Object.AuthenticationContext.clearCache (adal.js:396)
at Object.AuthenticationContext.logOut (adal.js:440)
at timerIncrement (localhost/:1208)
缓存代码
AuthenticationContext.prototype.clearCache = function() {
this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY, '');
this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY, 0);
this._saveItem(this.CONSTANTS.STORAGE.FAILED_RENEW, '');
this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE, '');
this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN, '');
this._renewStates = [];
this._saveItem(this.CONSTANTS.STORAGE.STATE_IDTOKEN, '');
this._saveItem(this.CONSTANTS.STORAGE.START_PAGE, '');
this._saveItem(this.CONSTANTS.STORAGE.USERNAME, '');
this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN, '');
this._saveItem(this.CONSTANTS.STORAGE.ERROR, '');
this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION, '');
var keys = this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);
if (!this._isEmpty(keys)) {
keys = keys.split(this.CONSTANTS.RESOURCE_DELIMETER);
for (var i = 0; i < keys.length; i++) {
this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY + keys[i], '');
this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY + keys[i], 0);
}
}
this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS, '');
};
答案 0 :(得分:0)
您直接调用该函数而不实际创建单例实例。这意味着从未定义CONSTANTS,因为调用函数时调用它的基础构造函数。请查看SPA JS sample on git hub了解如何使用身份验证上下文。有关如何初始化身份验证上下文,您可以在app.js from the sample。
中找到它 // Enter Global Config Values & Instantiate ADAL AuthenticationContext
window.config = {
instance: 'https://login.microsoftonline.com/',
tenant: '[Enter your tenant here, e.g. contoso.onmicrosoft.com]',
clientId: '[Enter your client_id here, e.g. g075edef-0efa-453b-997b-de1337c29185]',
postLogoutRedirectUri: window.location.origin,
cacheLocation: 'localStorage', // enable this for IE, as sessionStorage does not work for localhost.
};
var authContext = new AuthenticationContext(config);