Vấn đề xảy ra ở mỗi $routeChangeStart nếu không tìm thấy người dùng, nếu tôi chỉ nhập url thì nó vẫn hướng tôi đến trang.
Bây giờ tôi đã viết lại các quy tắc trên máy chủ.
Tùy chọn +Theo dõiSymlinks
Viết LạiĐộng CơBật
# Không viết lại tập tin hoặc thư mục
RewriteCond %{REQUEST_FILENAME} -f [HOẶC]
Viết lạiCond %{REQUEST_FILENAME} -d
Quy tắc viết lại ^ - [L]
RewriteRule (.*) /index.html [L]
Đây là app.js
var app = Angular.module('myApp', ['ngRoute']);
app.config(function($httpProvider){
// đính kèm bộ chặn Auth của chúng tôi vào các yêu cầu http
$httpProvider.interceptors.push('AuthInterceptor');
});
app.run(['$rootScope','$scope','Auth', '$location', function($rootScope, $scope, Auth, $location){
$rootScope.$on('$routeChangeStart', function(event){
$scope.loggedIn = Auth.isLoggedIn();
console.log(Auth.isLoggedIn());
Auth.getUser().then(function(response){
console.log(phản hồi);
$scope.user = phản hồi;
}).catch(hàm(lỗi){
console.log(lỗi);
});
});
}]);
Đây là nhà máy xác thực góc cạnh của tôi
app.factory('AuthToken', function($window){
var authTokenFactory = {};
authTokenFactory.setToken = function(token){
nếu(mã thông báo){
$window.localStorage.setItem('token', token);
}khác{
$window.localStorage.removeItem('token');
}
};
authTokenFactory.getToken = function(){
trả về $window.localStorage.getItem('token');
}
trả về authTokenFactory;
});
app.factory('Auth', function($http, $q, AuthToken, Passingtoken){
var authFactory = {};
authFactory.login = function(email, mật khẩu){
dữ liệu var = {
thư điện tử: thư điện tử,
mật khẩu: mật khẩu
};
return $http.post('/loginForm.php', JSON.stringify(data)).then(function(response){
// console.log(phản hồi);
AuthToken.setToken(response.data);
trả lời phản hồi;
}).catch(hàm(e){
console.log(e);
trả về $q.reject(e.data);
});
};
authFactory.logout = function(){
AuthToken.setToken();
};
authFactory.isLoggedIn = function(){
if(AuthToken.getToken()){
trả về đúng sự thật;
}khác{
trả về sai;
}
};
authFactory.getUser = function(){
var defer = $q.defer();
if(AuthToken.getToken()){
var userdata = JSON.parse(Passingtoken.getUserData());
userdata = userdata[0].data;
console.log(dữ liệu người dùng);
/**
* nhận mã thông báo. Có thể biến đây thành một dịch vụ giúp tôi nhận được mã thông báo này khi cần.
*/
$http.post('/decode.php', {
dữ liệu người dùng
}).then(hàm(phản hồi){
console.log(response.data.rows[0]);
//$scope.username = reply.data.rows[0].fullname;
trì hoãn.resolve(response.data.rows[0]);
}, hàm(e){
console.log(e);
});
}khác{
trả về $q.reject({
thông báo: 'Không tìm thấy người dùng'
});
}
trả lại defer.promise;
};
trả về authFactory;
});
app.factory('AuthInterceptor', function($q, $location, AuthToken){
var InterceptorFactory = {};
InterceptorFactory.request = function(config){
// lấy mã thông báo
var token = AuthToken.getToken();
// nếu mã thông báo được thêm vào tiêu đề
nếu(mã thông báo){
config.headers['x-access-token'] = token;
}
trả về cấu hình;
};
InterceptorFactory.responseError = function (phản hồi) {
if (response.status == 403){
AuthToken.setToken();
$location.path('/login');
}
trả về $q.reject(response);
};
trả lại máy đánh chặnFactory;
});
Đây là Bộ điều khiển chính của tôi đang kiểm tra các thay đổi tuyến đường
app.controller('mainCtrl', ['$scope', 'Passingtoken', '$http','$window', 'Auth', '$location', '$rootScope', function($scope, Passingtoken, $ http, $window, Auth, $location, $rootScope){
// kiểm tra đăng nhập
$scope.loggedIn = Auth.isLoggedIn();
// rootscope
$rootScope.$on('$routeChangeStart', function(event){
$scope.loggedIn = Auth.isLoggedIn();
console.log(Auth.isLoggedIn());
Auth.getUser().then(function(response){
console.log(phản hồi);
$scope.user = phản hồi;
}).catch(hàm(lỗi){
console.log(lỗi);
});
});
$scope.logged = function(){
if($scope.loginData.email !== '' && $scope.loginData.password !== ''){
Auth.login($scope.loginData.email, $scope.loginData.password).then(function(response){
//console.log(phản hồi);
if(response.data !== 'thất bại'){
Passingtoken.addData (phản hồi);
$location.path("/home");
//$window.location.reload();
}khác{
}
}, hàm(e){
console.log(e);
});
}
};
/**
* Chức năng đăng xuất
*/
$scope.logout = function(){
Auth.đăng xuất();
$scope.username = "";
$location.path("/");
}
}]);
Trong $rootscope.on, tôi đang kiểm tra xem người dùng có mã thông báo hay không, nếu người dùng có mã thông báo thì tuyến đường có thể được thay đổi (tôi đang sử dụng jwt) nhưng nếu tôi chuyển url thì nó sẽ đưa tôi đến bất kỳ thứ gì ngay cả khi tôi không' t có mã thông báo cục bộ. Trong Bộ điều khiển chính của mình, tôi đã thử thêm $location.path('/') vào .catch() sau đó trên mỗi tuyến đường thay đổi, nó sẽ đưa tôi đến đường dẫn đó ngay cả khi tôi chưa đăng nhập và cố gắng nhấp vào đăng nhập, nó sẽ chuyển hướng tôi đến con đường đó, điều đó sẽ có ý nghĩa. Tôi chỉ không biết làm cách nào để đảm bảo người dùng không thể truy cập qua url, góc cạnh chỉ nên kiểm tra mọi yêu cầu. Bất kỳ trợ giúp sẽ được đánh giá rất cao.
cảm ơn bạn trước
Tôi là một lập trình viên xuất sắc, rất giỏi!