Intereting Posts
hasMany проблема отношений в Laravel 5.3 + библиотека MongoDB 'jenssegers / laravel-mongodb' Как получить доступ к переменным PHP в JavaScript или jQuery, а не <? Php echo $ variable?> получить следующий и предыдущий день с PHP Получите разницу во времени Регулярное выражение регулярного выражения для проверки ввода: два слова с пробелом между Является ли аутентификация форм аутентификацией билетов с помощью PHP? Laravel driver 'mail' не отправляет электронное письмо Symfony2 Монолог для отправки по электронной почте Ошибок, почему swiftmailer.transport.real – несуществующий сервис regex: удалить весь текст внутри «двойных кавычек» (включая многострочные) Запрос на ввод MySQL Настройка базы данных ACL CakePHP: структура ARO / ACO? PHP Использование переменной при вызове статического метода PHP – можно ли объявить метод статическим и нестатическим Получить высоту и ширину изображения PHP Пустые пробелы в именах столбцов с MySQL

Перенаправление на вход в систему, когда пользователь не вошел в систему, или пользователь пытается получить доступ к странице напрямую с URL-адреса, используя angularjs

Я создаю небольшой проект, в котором, если роль пользователя – Sales, то после входа в систему он перенаправляет пользователя на страницу формы продаж. Теперь, как я могу перенаправить пользователя на страницу входа в систему, если пользователь пытается получить доступ к странице Sales form , указав свой путь в URL-адресе, а также пользователь не зашел в систему. Это моя угловая часть.

 app.controller('LoginCtrl',function($scope,$http,$window){ $scope.login = function(){ data={ email:$scope.email, pwd:$scope.pwd } $http.post("widget/login.php",data).success(function(data){ console.log(data); if(!data.success){ $scope.errorMsg="username or password is incorrect"; } else{ $scope.role=data.role; $scope.id=data.id; if(data.role == "admin"){ $window.location.href="AdminPage.html"; } else if(data.role == "Sales"){ $window.location.href="sales_form.html"; } else if(data.role == "Account"){ $window.location.href="account_form.html"; } else if(data.role == "Technical"){ $window.location.href="Technical_Form.html"; } else{ $scope.errorMsg="username or password is incorrect"; } } }); } }); 

Из этого как я могу перенаправить пользователя на страницу входа, если пользователь не вошел в систему или не пытается получить доступ к странице напрямую из URL. И еще одно, что я использую PHP в качестве Backend, так как вы можете увидеть его в разделе $http.post так что дайте свой ответ соответственно. $http.post помочь и заблаговременно.

  1. Используйте угловые.js, angular-route.js, angular-cookies.js и app.js на индексной странице следующим образом:

      <script src="//code.angularjs.org/1.2.20/angular.js"></script> <script src="//code.angularjs.org/1.2.20/angular-route.js"></script> <script src="//code.angularjs.org/1.2.13/angular-cookies.js"></script> <script src="app.js"></script> 
  2. В app.js

      var app = angular.module('app', ['ngRoute', 'ngCookies']); app.config(config); app.run(run); config.$inject = ['$httpProvider','$routeProvider', '$locationProvider']; function config($httpProvider, $routeProvider, $locationProvider) { //Set routing $routeProvider .when('/login', { controller: 'LoginController', templateUrl: 'login/login.view.html', controllerAs: 'vm' }) .otherwise({ redirectTo: '/login' }); } //Write following code to make user login after page refresh run.$inject = ['$rootScope', '$location', '$cookieStore']; function run($rootScope, $location, $cookieStore, $http, chatService) { // keep user logged in after page refresh $rootScope.globals = $cookieStore.get('globals') || {}; if ($rootScope.globals.currentUser) { // set token in request header // $http.defaults.headers.common['Authorization'] = $rootScope.globals.currentUser.authdata; } //On location change redirect user to login page if not login else redirect based on role $rootScope.$on('$locationChangeStart', function (event, next, current) { // redirect to login page if not logged in and trying to access a restricted page //allow login and register page for all(login/notlogin) user var restrictedPage = $.inArray($location.path(), ['/login', '/register']) === -1; var loggedIn = $rootScope.globals.currentUser; if (restrictedPage && !loggedIn) { $location.path('/login'); } else{ $scope.role=$rootScope.globals.currentUser.user.role; if(data.role == "admin"){ $window.location.href="AdminPage.html"; } else if(data.role == "Sales"){ $window.location.href="sales_form.html"; } else if(data.role == "Account"){ $window.location.href="account_form.html"; } else if(data.role == "Technical"){ $window.location.href="Technical_Form.html"; } else{ $scope.errorMsg="username or password is incorrect"; } } }); } 
    1. В login-Control напишите следующий код

        app.controller('LoginCtrl',function($scope,$http,$window){ $scope.login = function(){ data={ email:$scope.email, pwd:$scope.pwd } $http.post("widget/login.php",data).success(function(data){ if(!data.success){ $scope.errorMsg="username or password is incorrect"; } else{ //Set cookie $rootScope.globals = { currentUser: { user: data } $cookieStore.put('globals', $rootScope.globals); //Redirect url $window.location.href="/"; } }); 

вы должны использовать угловую маршрутизацию вместо $ window.location.href.

Позвольте мне показать вам, используя ui-router.Add эту строку в index.html после загрузки загруженной библиотеки.

 <script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.8/angular-ui-router.min.js"></script> 

В вашем приложении app.js

 var routerApp = angular.module('routerApp', ['ui.router']); routerApp.config(function($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise('/home'); $stateProvider // HOME STATES AND NESTED VIEWS ======================================== .state('login', { url: '/login', templateUrl: 'login.html', controller : 'LoginController' }) // SALES PAGE AND MULTIPLE NAMED VIEWS ================================= .state('sales', { url: '/sales', templateUrl: 'sales_form.html', controller : 'SalesController' ...... ...... }); }); 

Теперь в вашем контроллере

  app.controller('LoginCtrl',function($scope,$http,$window,$state){ $scope.login = function(){ data={ email:$scope.email, pwd:$scope.pwd } $http.post("widget/login.php",data).success(function(data){ console.log(data); if(!data.success){ $scope.errorMsg="username or password is incorrect"; $state.go('login'); } else{ $scope.role=data.role; $scope.id=data.id; if(data.role == "admin"){ $state.go('admin'); //add admin state as admin in ui-router like sales } else if(data.role == "Sales"){ $state.go('sales'); } ..... else{ $scope.errorMsg="username or password is incorrect"; $state.go('login'); } } }); } }); 

Вам нужно сохранить переменную роли в корнеплодах, чтобы каждый контроллер мог получить к ней доступ.

После успешного входа в систему сохраните переменную роли в rootScope

  $rootScope.role=data.role; 

Затем в каждом контроллере проверьте значение роли и перенаправьте идентификатор iser, роль не соответствует требуемой роли

  if($rootScope.role != "Sales"){ $window.location.href="login.html"; } 

Что вам нужно – это служба для обработки логина / выхода из системы, которая также сохраняется в loggedInState. Услуги – это надлежащий масштабируемый способ передачи данных вокруг углового приложения

 module.service('LoginService', LoginService); function LoginService() { var isLoggedIn = false; var service = { login: function() { //do login work loggedIn = true; }, logout: function() { //do logout work loggedOut = false; }, get isLoggedIn() { return isLoggedIn; } }; return service; } 

Вы можете использовать разрешение маршрута на пути продаж, чтобы попасть в LoginService и перенаправить на логин, если он не вошел в систему. Дополнительная информация здесь: https://johnpapa.net/route-resolve-and-controller-activate-in-angularjs/

Предполагая, что Angular работает на клиенте и знает, что PHP работает на сервере, я бы не рекомендовал делать эту задачу в Angular, если у вас нет веской причины. Это происходит не потому, что это невозможно, а потому, что (как правило) результат запуска кода на клиентской машине не следует доверять, в то время как результаты от кода, запускаемого на сервере (обычно), можно доверять.

В PHP

 session_start(); if($_SESSION(['loggedIn'])) { if($_SESSION(['role']) == 'sales') { //Do something } //Do something else } else { //Ask them to log in } 

Выполняя что-то в PHP (или, точнее, используя язык на стороне сервера), вы можете более точно настроить то, что хотите. Что делать, если кто-то отключает Javascript? Получат ли они доступ к привилегированной информации? Что, если кто-то злонамерен (нужен не сотрудник), может ли он передать состояние на клиентской машине, чтобы получить доступ?

У меня была такая же проблема, и я разрешил ее, представив некоторые документы.

У нас был backend как Java, с угловыми js.Я отправляю то же самое, что работает отлично. Это может вам помочь.

LogonController.js

 scope.loginMerchant = function(merchant){ MerchantRepository.loginMerchant(merchant) .then(function (response){ scope.emailId=response.data.emailId; MerchantRepository.setEmailId(scope.emailId); if(response.data.userType == "merchant"){ state.go("merchanthome"); } else { alert(" ID/Password is Invalid..."); state.go("merchantlogon"); } }); }; 

MerchantRepository.js

Вы можете сделать это в своем репозитории, чтобы во время входа в систему он установил emailId.And извлекается всякий раз, когда URL доступен

 this.setEmailId=function(emailId){ this.emailId=emailId; window.sessionStorage.setItem("emailId",emailId); } this.getEmailId=function(){ return window.sessionStorage.getItem("emailId"); } 

HomePageController.js

 scope.user=MerchantRepository.getEmailId(); if(scope.user== 'null' || scope.user== null){ state.go("logon"); }; 

Поэтому каждый раз, когда вы вводите URL-адрес страницы, контроллер загружает и проверяет данные для входа. Если нет перенаправлений на страницу входа.

редактировать

И если вы также хотите отключить проблему с кнопкой «Назад», добавьте это в код выше.

LogonController.js

 doMerchantLogout(); function doMerchantLogout() { MerchantRepository.doMerchantLogout().then( function(result) { scope.merchantSatus = result.data; scope.emailId= null;//so it set to null,this satisfies condition and redirects to login page MerchantRepository.setEmailId(scope.emailId); }); }; 

Надеюсь, это может помочь вам. Это рабочий фрагмент.

спасибо

На мой взгляд, самый простой способ достичь своей цели – создать ввод скрытого типа и передать значение вашей сессии: 1, если вы вошли в систему, и 0, если вы вышли из системы в качестве образца.

Затем создайте условие внутри Углового. Если значение модели равно = 0, то перенаправление на страницу входа, иначе перенаправление где-нибудь.

попробуйте использовать $ state.

  angular.module('app',[]) app.controller('LoginCtrl',function($scope,$state){ $scope.login = function(){ data={ email:$scope.email, pswd:$scope.pswd } $http.post("/login.php",data).success(function(data){ console.log(data); if(!data.success){ $scope.errorMsg="username or password is incorrect"; $state.go('app.login'); } else{ $scope.role=data.role; $scope.id=data.id; if(data.role == "admin"){ $state.go('app.admin'); //add admin state as admin in ui-router like sales } else if(data.role == "Sales"){ $state.go('app.sales'); } ... ... else{ $scope.errorMsg="username or password is incorrect"; $state.go('app.login'); } } }); } });