我有两个JavaScript文件来处理我的网页登录功能。第一个js文件对用户进行身份验证,并返回会话令牌,该令牌应传递给第二个js文件以进行会话验证。
这是第一个js文件的代码段。
var Login = window.Login || {};
(function scopeWrapper($) {
var apiEndPoint = 'https://4pmsdffwl2.execute-api.ap-southeast-2.amazonaws.com/prod';
Login.sessionId = 'null'
function signin(username, password, onSuccess, onFailure) {
let endpoint = apiEndPoint + '/signin'
let config = {
"username": username,
"password": password
}
return axios.post(endpoint, config)
.then((res) => {
Login.sessionId = res.session_id
console.log(Login.sessionId) \\this prints the session id correctly
onSuccess(res);
return Promise.resolve('/')
})
.catch((err) => {
console.error(err)
onFailure(err)
return Promise.reject('/')
})
}
$(function onDocReady() {
$('#signinForm').submit(handleSignin);
});
function handleSignin(event) {
var email = $('#emailInputSignin').val().toLowerCase();
var username = email;
var password = $('#passwordInputSignin').val();
event.preventDefault();
signin(username, password, email,
function signinSuccess() {
console.log('Successfully Logged In');
window.location.href = 'second.html';
},
function signinError(err) {
alert(err);
}
);
}
}(jQuery));
这个想法是初始化一个全局变量sessionId,该变量通过登录功能使用会话ID更新。
这是第二个js文件的代码段,我试图使用从第一个js文件传入的sessionId。
var Login = window.Login || {};
Login.map = Login.map || {};
(function uploadScopeWrapper($) {
console.log(Login.sessionId) \\This prints null instead of sessionId
if (Login.sessionId) {
window.location.href = 'welcome.html';
} else {
window.location.href = 'login.html';
}
}(jQuery));
我不太确定为什么窗口对象没有使用登录功能中生成的sessionId更新。
此处的plnkr中的示例代码:https://plnkr.co/bYECNY
非常感谢您的帮助。
感谢
您正在导航到另一个页面,然后从该另一个页面加载第二个脚本文件。
当您导航到其他页面,同一页面或仅刷新当前页面时,所有全局变量都会丢失。
有关存储信息的时间长于当前文档加载到浏览器中的方式,请参见Persist variables between page loads