繁体   English   中英

限制用户登录后重定向到登录页面,即使他按角度按浏览器的后退按钮?

[英]restrict the redirection to login page once the user has already logged in even if he press the back button of browser in angular?

我想创建一个登录页面来检查条件,然后用户将被重定向到主页,现在我要实现一个条件,即当用户访问主页并且他单击“后退”按钮或浏览器时,他应该无法再次访问登录页面。 我试图将变量isLogged in设置为false,并在检查了用户名和密码后将该变量设置为true并将其存储在本地存储中,并像flag一样使用它,但是我无法正确获取错误之处。

这是我的app.js

var validationApp = angular.module('validationApp',['ngRoute','ngStorage']);
var loggedIn = false;
validationApp.run(function($rootScope, $localStorage){
  //var loggedIn = false;
    //if(!loggedIn) {
        storage = window.localStorage;
        //storage.setItem("loggedIn", true);
        //console.log(storage.getItem("loggedIn"));
//    $rootScope.$storage = $localStorage.$default({
//        loggedIn: false
//    })
//    }
});

validationApp.controller('mainController', function($scope,loginservice,$localStorage) {
    $scope.dologin = function () {
        //storage.setItem("loggedIn" ,true);
        //loginsucess = storage.getItem("loggedIn");

        if(loggedIn == false) {
            //console.log(loginsucess);
            if ($scope.userForm.$valid) {
                loginservice.login($scope.user.email, $scope.user.password);
            }
            storage.setItem("loggedIn", true);
        }
    }
});

我也尝试在路线中添加检查条件,现在即使获得有效的凭据也无法获得主页。

validationApp.config(

    function($routeProvider) {
        $routeProvider
            .when('/', {
                templateUrl: 'main.html',
                controller: 'mainController'
            })
            .when('/home', {
                templateUrl: 'home.html',
                resolve:{
                    "check":function($location){
                        if(storage.getItem(loggedIn) == true)
                        {
                            alert(loggedIn);
                            $location.path("/home");
                        }
                        else
                        {
                            $location.path("/main");
                        }
                    }
                },
                controller: 'mainController'
            })
            .otherwise({
                redirectTo: '/'
            });
});


validationApp.service('loginservice',function($location)
{
    this.login = function(username, password){
        console.log(username,password);

        if(username == "ank@gmail.com" && password=="1234")
        {
            //alert('thank you for submitting your form');
            $location.path("/home");

            //console.log(storage.getItem("loggedIn"));
        }
        else
        {
          //alert("invalid username and password");
            $location.path("/main");

        }
    }
});

请参见工作示例: http : //plnkr.co/edit/46O0znC5HFDE4cYXSm5h?p=preview

在登录功能中存储在cookie中的数据如下:

$cookies.userinfo = {
    'id': 1,
    'name': 'pqr'
};

在注销时删除该数据-

delete $cookies.userinfo;

然后查找“ angular.isDefined($ cookies.userinfo)”(userinfo是在其中存储数据时给定的cookie名称)是否找到,然后将其重定向到登录后要查看的页面。

app.run(function ($cookies) {
      $rootScope.$on("$routeChangeStart", function () {
        if (angular.isDefined($cookies.userinfo)) {
            $location.path("/pathname");
        }

      });
});

看看这是否符合您的目的

var validationApp = angular.module('validationApp',  ['ngRoute','ngStorage']);

    var loggedIn = false;
    validationApp.run(function($rootScope, $localStorage, $location){

       storage = window.localStorage;
       $rootScope.$on("$routeChangeStart", function (evt, next, current) {

           if(storage.getItem(loggedIn) == true) {
                if (next.$$route.originalPath == '/login')
                    $location.path('/home');
           }
           else
             $location.path('/login');
       });


});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM