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

时间:2015-06-15 05:39:00

标签: javascript angularjs

我想创建一个检查条件的登录页面,然后用户被重定向到主页,现在我想实现一个条件,当用户访问主页并点击后退按钮或浏览器时,他应该&#39 ; nt能够再次访问登录页面。我试图将变量isLogged设置为false并在检查用户名和密码后将该变量设置为true并将其存储在本地存储中并像旗帜一样使用它,但我无法正确地找到错误的位置。< / p>

这是我的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");

        }
    }
});

2 个答案:

答案 0 :(得分:0)

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

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

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

在注销时删除该数据 -

delete $cookies.userinfo;

然后检查&#39; angular.isDefined($ cookies.userinfo)&#39; (userinfo是在存储数据时给出的cookie名称)如果找到然后将其重定向到您想要在登录后看到的页面。即

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

      });
});

答案 1 :(得分:0)

看看这是否符合你的目的

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');
       });


});