如果未经身份验证,请将用户重定向到登录页
Redirect users to login page if unauthenticated
我使用node.js restify作为后端,angularjs作为前端。
我有一个有3个网页的网站。这就是我想要的。每当任何用户访问这些网页时,如果他们没有经过身份验证,就会被重定向到登录页面。
我的做法是在每个网页上强制进行身份验证。角度控制器看起来是这样的;
.controller('LoginAuthentication', ['$scope', '$http', 'configuration', 'dialogs',
function($scope, $http, $configuration, dialogs)
{
//alert("testing LoginAuthentication controller");
var url_check_user_logged_in = '127.0.0.1/users/check_loggedin';
$http.get(url_check_user_logged_in).success(function(data, status, headers, config)
{
if (data.LoggedInStatus === 'NotLoggedIn')
{
console.log('NotLogged');
window.location.href=$configuration.webroot + "/app/login.html";
}
else if (data.LoggedInStatus === 'LoggedIn')
{
console.log('Logged');
}
});
}])//.controller('MyCtrl1', [function()
angularjs有没有更有效的方法?这种方法违反了DRY(不要重复自己)原则,因为我必须在每个网页中重复相同的代码。
在loginCtrl.js 中放入以下代码
$scope.login = function(){
if($scope.email === 'test@test.com' && $scope.password === "1234"){
$cookies.isLogin = true;
$cookies.put('isLogin', true);
$state.go('home');
}
else
$scope.error = "wrong credential";
};
当登录成功时,它将存储cookie"isLogin"。
当$stateChangeStart函数的状态在app.js中更改时:
$rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) {
if (toState && toState.secure) {
if($cookies.get('isLogin')){
//do nothing
}else{
$state.go("login");
event.preventDefault();
}
}
if(toState.url == '/login' && $cookies.get('isLogin')) {
$state.go("home");
event.preventDefault();
}
});
所以在这里检查cookie。
我希望这能奏效。!
您可以使用Angular服务。或类似cookie/会话之前所述。
以下是Angular服务的链接sl:https://docs.angularjs.org/guide/services
首先添加工厂:
angular.module("myApp").factory('LoginService',function($location){
var service={};
service.loggedIn=function(){....}
service.redirectIfNotLoggedIn=function(){
if(! service.loggedIn())$location.path("/login");
}
return service;
})
然后对您拥有的每个页面调用LoginService.redirectIfNotLoggedIn()
。另外,不要忘记完成service.loggedIn()
方法,并将LoginService
注入相应的Controllers
。
我上面给出的答案适用于简单、简单的系统。然而,我注意到你每次都在呼叫服务器(我说得对吗?)。如果您想要异步方法,可以将以下内容添加到LoginService
:
service.loggedIn=false;
service.asyncAuthorize=function(cb,error){
$http.get(url_check_user_logged_in).success(function(data){
if (data.LoggedInStatus === 'NotLoggedIn'){
service.loggedIn=false;
cb(false);
}else if (data.LoggedInStatus === 'LoggedIn'){
service.loggedIn=true;
cb(true);
}
}).error(function(data){
if(! error) return;
error(data);
});
}
然后,您可以简单地调用LoginService.asyncAuthorize(cb)
或LoginService.asyncAuthorize(cb,fun)
,如果请求失败,它将接收回调。
cb
参数是作为请求而执行的函数。如果用户已登录,则cb
返回true
,否则返回false
。如果对服务器的请求失败,则调用error
。
控制器中的最终代码:
LoginService.asyncAuthorize(function(state){
console.log(state , "is the login state");
},function(e){
console.log("could not contact server");
});
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- 意思是.js - 登录后重定向用户 - 在本地工作,但在部署时不起作用
- 当用户在选择框中选择选项时,使用window.location.href重定向用户只会更改导航器中URL的最后一位
- 如何从特定国家/地区重定向用户
- 注销后如何重定向用户
- 如何在不重定向用户的情况下更改地址栏URL(不使用历史API?)
- 试图在表单post之后使用jQuery.post()重定向用户
- 根据React中的状态重定向用户
- 如何根据 html 中的选项/选择重定向用户(单击按钮后)
- 如果 cookie 为空 jquery,则设置和重定向用户
- 如果用户在发布之前没有设置密码,请重定向用户
- 使用 Javascript 根据设备重定向用户
- 如何删除未定义的对象错误并根据位置重定向用户
- 如何使用 PHP 而不是 JS 重定向用户
- 根据时区重定向用户
- 在 iframe 源更改后重定向用户
- Ionic (AngularJS) - 重定向用户和路由
- 成功提交表单后重定向用户
- 未重定向用户的控制器操作是从AJAX调用的
- 超链接没有't使用jQuery重定向用户