Javascript 在网络中保护路由
我正在开发一个Angular应用程序,它调用外部API进行登录验证 我要成功地调用API来登录和注销,我使用它将布尔值放入本地存储(因此刷新时它会保持不变) 我觉得这可能是一种非常糟糕的实现方式。有没有更好的方法 我的实施: app.jsJavascript 在网络中保护路由,javascript,angularjs,Javascript,Angularjs,我正在开发一个Angular应用程序,它调用外部API进行登录验证 我要成功地调用API来登录和注销,我使用它将布尔值放入本地存储(因此刷新时它会保持不变) 我觉得这可能是一种非常糟糕的实现方式。有没有更好的方法 我的实施: app.js var module = angular .module('myApp', [ 'ngRoute', 'ngTouch', 'LocalStorageModule' ]) .config(function ($routePr
var module = angular
.module('myApp', [
'ngRoute',
'ngTouch',
'LocalStorageModule'
])
.config(function ($routeProvider, $locationProvider, localStorageServiceProvider) {
$routeProvider
...
.when('/protectedroute, {
...
resolve: {
'auth': function(Auth) {
return Auth.authorized();
}
}
})
}
身份验证服务:
angular.module('myApp')
.service('Auth', function ($http, $q, $window, $location, localStorageService) {
var isLogged = localStorageService.get('isLogged');
console.log(isLogged);
return {
authorized: function() {
if (!localStorageService.get('isLogged')) {
console.log('DENY');
$location.path('/');
} else {
console.log('ALLOW');
}
}
}
});
登录服务:
angular.module('myApp')
.service('Login', function ($http, $q, $window, $location, localStorageService) {
return {
login: function (username, password) {
var reqLogin = {
method: 'POST',
url: 'url_api',
data: $.param({
'user[email]': username,
'user[password]': password
}),
headers: {
...
}
}
$http(reqLogin).then(function successCallback(response) {
console.log('success!');
console.log(response);
localStorageService.set('isLogged', true);
localStorageService.set('user[email]', username);
console.log(localStorageService.get('isLogged'), localStorageService.get('user[email]'));
$location.path('/profile');
}, function errorCallback(response) {
console.log('failure');
console.log(response);
});
},
logout: function() {
var reqLogout = {
method: 'DELETE',
url: 'url_api',
headers: {
...
}
}
$http(reqLogout).then(function successCallback(response) {
console.log('success!');
console.log(response);
localStorageService.set('isLogged', false);
console.log(localStorageService.get('isLogged'), localStorageService.get('user[email]'));
$location.path('/');
}, function errorCallback(response) {
console.log('failure');
console.log(response);
});
}
};
});
在app.js的run()方法中,附加到路由更改事件。当您的URL或状态发生变化时,该事件将触发,在那里,您可以检查您想要的任何条件,并在以后执行每一个操作类似这样的操作?确切地这就是你所能做的保护你想要的路线的方法,如何比我目前所做的方法更安全?你无法做任何事情来保护你的路线。因为每个使用你的站点的人都会下载你的源代码的副本(缩小了?),所以他们可以修改它。不过,您可以通过服务器端身份验证来保护API调用,但这完全是另一回事。