Javascript 在react flux应用程序中保持用户登录?
我正在开发一个react-flux应用程序,其中我使用sessionStorage通过检查sessionStorage中是否有电子邮件和身份验证令牌来保持用户登录。如果它们可用,并且自登录以来的时间少于15分钟,我将触发flux操作以让用户登录。我还有另一个功能,可以在15分钟后通过清除会话存储来注销用户 它工作正常,直到我刷新页面。此时,用户在15分钟后注销的setInterval函数会自行重置 下面是我所指的代码: 在父组件中,我在componentDidMount函数中调用了以下函数Javascript 在react flux应用程序中保持用户登录?,javascript,authentication,reactjs,flux,session-storage,Javascript,Authentication,Reactjs,Flux,Session Storage,我正在开发一个react-flux应用程序,其中我使用sessionStorage通过检查sessionStorage中是否有电子邮件和身份验证令牌来保持用户登录。如果它们可用,并且自登录以来的时间少于15分钟,我将触发flux操作以让用户登录。我还有另一个功能,可以在15分钟后通过清除会话存储来注销用户 它工作正常,直到我刷新页面。此时,用户在15分钟后注销的setInterval函数会自行重置 下面是我所指的代码: 在父组件中,我在componentDidMount函数中调用了以下函数 ch
checkSession: function() {
if (!_.isNull(window.localStorage)) {
var currentTimeStamp = Date.parse(new Date());
var logInStamp = window.sessionStorage.time;
var difference = currentTimeStamp - logInStamp;
if (Math.floor((difference / 1000) / 60) < 15) {
var data = {
email: window.sessionStorage.email,
scheduler_slug: window.sessionStorage.slug
};
ActionCreator.loginUser(data);
}
}
},
logOut: function() {
if (this.state.isLoggedIn === true) {
window.sessionStorage.clear();
ActionCreator.logOutUser();
}
},
componentDidMount: function() {
Store.addChangeListener(this._onChange);
this.checkSession();
setInterval(this.logOut, 900000);
}
检查会话:函数(){
如果(!.isNull(window.localStorage)){
var currentTimeStamp=Date.parse(new Date());
var logInStamp=window.sessionStorage.time;
var差异=当前时间戳-logInStamp;
如果(数学下限((差/1000)/60)<15){
风险值数据={
电子邮件:window.sessionStorage.email,
调度程序\u slug:window.sessionStorage.slug
};
ActionCreator.loginUser(数据);
}
}
},
注销:函数(){
if(this.state.isLoggedIn==true){
window.sessionStorage.clear();
ActionCreator.logOutUser();
}
},
componentDidMount:function(){
Store.addChangeListener(this.\u onChange);
这个.checkSession();
setInterval(this.logOut,900000);
}
我正在为sessionStorage设置关键值,前提是创建会话的ajax调用成功。在随后的api调用中,我将从响应头中的第一个调用中收到的令牌发送回以进行身份验证
我的问题有两个:
1) 我目前的方法是否足以维持用户会话?使用饼干会更好吗
2) 如果我目前的方法是好的,那么我需要找出一种方法来防止计时器在页面刷新时重置,我认为这是一个简单的修复方法,但我看到的一切都涉及到使用cookies。还有别的办法吗
会话存储
中存储了一些内容,您也可以选择将数据简单地存储在localStorage中。这将确保数据保持不变,并且由于节省了时间,您基本上提供了自己的会话存储,在刷新后仍然有效sessionStorage
不应在刷新时重置自身,它存在于选项卡上下文中。因此,如果打开一个新选项卡,您确实会获得一个新会话,如果刷新,您应该具有相同的存储空间。根据您的应用程序,如果您在某处替换数据,或者刷新发生在不同的选项卡中,您可能需要查看一番。