防止Angular网站上未经授权的用户在重定向到登录之前看到网站的最佳方式
Best way to prevent unauthorized user on Angular site from seeing site for a split second before being redirected to login?
我目前正在一个站点上构建Angular前端,该站点从需要通过登录授权的API获取大量数据。
我已经构建了以下authInterceptor,它运行良好,如果从服务器发送401错误,它会将用户重定向到登录页面:
angular
.module('myApp.services')
.factory('authInterceptor', ['$rootScope', '$q', '$window', '$location', function($rootScope, $q, $window, $location) {
return {
'request': function(config) {
config.headers = config.headers || {};
if ($window.sessionStorage.token) {
config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
}
return config;
},
'response': function(response) {
return response || $q.when(response);
},
responseError: function(rejection){
if (rejection.status == 401){
$location.path('#/login');
}
return $q.reject(rejection);
}
};
}])
这方面的问题是API调用,因此401错误直到页面加载过程结束才会发生-因此,在应用程序访问API并获得401之前,用户可以看到页面上加载的所有元素(例如,HTML、CSS、图像和所有其他未访问API的元素)的一瞬间。
我通过在我的MainController的开头放一个随机的API调用来解决这个问题,这个调用并没有真正做任何事情,但这似乎是错误的方法,因为我正在对服务器进行不必要的ping。对此有什么建议和最佳实践吗?
此外,当我遇到那些未经授权的路由时,我会在控制台中收到丑陋的401错误消息——有没有一种方法可以在不向用户显示这些消息的情况下进行重定向,或者这很正常?
我认为ng斗篷可能会在这里对您有所帮助,因为您可以将其添加到应该隐藏的元素中,直到您的应用程序启动,我也做了类似的事情,将尝试为您提供一个示例
如果您使用ui路由器进行应用程序路由,您可以在"已验证"状态的父级中使用嵌套状态和解析子句,以确保只有在"登录"请求已成功解析时才能访问该控制器/模板,并在请求失败时重定向到"登录"状态。
以下是一些关于如何使用ui路由器保护"已验证"路由的指南:
http://blog.john.mayonvolcanosoftware.com/protecting-routes-in-angularjs/
相关文章:
- 突然间我可以't登录ASP.Net网站
- 使用 nodejs 通过蒸汽登录登录网站
- 将登录链接到另一个网站而不提供密码
- 如何创建一个提示用户输入登录id和密码的网站
- 从网站调用phpmyadmin中的存储过程来检查登录详细信息
- 使用Ajax登录网站
- Casperjs-登录https网站的脚本出错
- 为移动网站高效登录Facebook
- 如何使用脚本将twitter登录集成到我的网站
- 使用自制的html表单注册/登录网站
- Protractor:非角度登录到角度网站
- 如何创建Django网站的facebook登录
- 登录到网站并从页面获取html
- 防止Angular网站上未经授权的用户在重定向到登录之前看到网站的最佳方式
- 自动网站登录打开浏览器
- 如何使用社交网络帐户或其他网站登录
- jqueryget,post在尝试创建自动网站登录时不起作用
- 网站登录使用WebView Javascript Android
- 自动填写其他网站登录表单中的值
- 从我的网站登录gmail