我有一个通过令牌的身份验证系统。用户使用电子邮件和密码登录,然后返回令牌并保存在 cookie 中。现在,如果用户关闭浏览器或选项卡并返回该站点,则用户将使用 cookie 中的令牌进行身份验证,但是,这可能需要相当多的毫秒时间,并且如果他们返回到安全站点,例如他们的用户配置文件,并且应用程序没有足够快的速度加载初始用户数据并将其标记为已登录,然后将它们重定向到登录页面。
我的第一个想法是将用户数据放入每个请求的响应中,其中令牌有效,但这会产生大量不必要的数据流量。
有更好的解决方案吗?
我有一个通过令牌的身份验证系统。用户使用电子邮件和密码登录,然后返回令牌并保存在 cookie 中。现在,如果用户关闭浏览器或选项卡并返回该站点,则用户将使用 cookie 中的令牌进行身份验证,但是,这可能需要相当多的毫秒时间,并且如果他们返回到安全站点,例如他们的用户配置文件,并且应用程序没有足够快的速度加载初始用户数据并将其标记为已登录,然后将它们重定向到登录页面。
我的第一个想法是将用户数据放入每个请求的响应中,其中令牌有效,但这会产生大量不必要的数据流量。
有更好的解决方案吗?
在路由上使用 resolves 来等待用户信息被加载。因此,是否重定向到登录页面或允许路由访问取决于您的加载用户处理程序的处理程序。例如:
function requiresLogin(){
return ["$auth",function($auth){
return $auth.verifiedUser();
}];
}
$routeProvider.when("...",{
....,
resolve:{
user:requiresLogin()
}
});
在您的 $auth 服务中:
angular.module("app").factory("$auth", ["$q", "$http", function($q,$http){
var loaded, loggedIn = false;
//load user
loaded = $http.get(....).then(function(result){
loggedIn = result.loggedIn;
});
return {
verifiedUser:function(){
return loaded.then(function(){
if(loggedIn)
return true;
else
return $q.reject();
});
}
};
}]);
未经测试的代码,只是为了给出一个关于如何去做的想法。
如果没有更多代码,我们无法提供明确的答案。