简体   繁体   English

使用angular-ui-route限制用户无需登录即可进入内页

[英]Restrict user going to the inner page without login using angular-ui-route

I have an angular project. 我有一个有角度的项目。 In that if i type in the url as "dashboard" it is redirecting to "dashboard.html" page. 如果我在网址中键入“仪表板”,则会重定向到“dashboard.html”页面。 But i want to restrict user going into that page without successfully logged In. 但我想限制用户进入该页面而未成功登录。

Below in my routing code please check. 在我的路由代码下面请检查。

index.js index.js

angular.module('adminsuite',['ui.router','ngCookies']).config(function($stateProvider, $urlRouterProvider) {

$urlRouterProvider.otherwise('/');

$stateProvider
    .state('login', {
        url: '/',
        views:{
            pageContent:{
                templateUrl: 'Login/login.html',
                controller: 'loginController'
            },
            footer:{
                templateUrl: 'common/footer.html',
                controller: 'footerController'
            }
        }



    })
    // HOME STATES AND NESTED VIEWS ========================================
     .state('dashboard', {
        url: '/dashboard',
        views:{
            header:{
                templateUrl: 'common/header.html',
                controller: 'headerController'
            },
            pageContent:{
                templateUrl: 'dashboard/dashboard.html',
                 controller: 'dashboardController'
            },
            footer:{
                templateUrl: 'common/footer.html',
                controller: 'footerController'
            }
        }
    })
    //SURVEY STATES
    .state('survey', {
        url: '/survey',
        views:{
            header:{
                templateUrl: 'common/headerTool.html',
                controller: 'headerController'
            },
            pageContent:{
                templateUrl: 'survey/survey.html',
                  controller: 'surveyController'
            },
            footer:{
                templateUrl: 'common/footer.html',
                controller: 'footerController'
            }
        }
    });

    // ABOUT PAGE AND MULTIPLE NAMED VIEWS =================================

});

in your loginController store value in $rootscope if user sucessfully logged in. 如果用户成功登录,则在$ rootscope中的loginController存储值中。

if(userloggedin == true )
{
  $rootscope.loggedinuser = true
}

in your dashboardController get value from $rootscope and check if $rootscope.loggedinuser is equal to true then dasboard.html page will show otherwise page redirect to login page. 在您的dashboardController中从$ rootscope获取值并检查$ rootscope.loggedinuser是否等于true然后dasboard.html页面将显示否则页面重定向到登录页面。

in your dashboardController 在您的dashboardController中

if($rootscope.loggedinuser !=true)
{
    $state.go('login');
}

You can do one thing. 你可以做一件事。 In your loginController create a variable and store that in local storage if the user successfully logged in. And in your dashboard routing statement resolve that data from local storage. loginController创建变量并在用户成功登录时将其存储在local storage中。并在dashboard路由语句中从本地存储中解析该数据。 The page will load to /dashboard only if it can resolve that data. 仅当页面可以解析该数据时,该页面才会加载到/dashboard If he is not logged in the resolving data will be undefined 如果他未登录,则解析数据将是未定义的

.state('dashboard', {
    url: '/dashboard',
    views:{
        header:{
            templateUrl: 'common/header.html',
            controller: 'headerController'
        },
        pageContent:{
            templateUrl: 'dashboard/dashboard.html',
             controller: 'dashboardController'
        },
        footer:{
            templateUrl: 'common/footer.html',
            controller: 'footerController'
        }
    },
    resolve: {
       accessToken: ['$localStorage', function($localStorage){
           return $localStorage.accessToken
        }]
    }
})

OR your resolve code can be like 或者你的解析代码就像

resolve: {
   accessToken: ['$localStorage','$state', function($localStorage, $state){
       if($localStorage.accessToken)
         return $localStorage.accessToken
       else{
         $state.go(login)
         return;
       }
    }]
}

here variable accessToken is storing to $localStorage in your loginController as 这里变量accessToken存储在loginController $localStorage

if('successfully logged in'){
  $localStorage.accessToken = 'a random value';
}

You can use sessionStorage , $cookieStore etc. instead of $localStorage . 您可以使用sessionStorage$cookieStore等代替$localStorage It's option of you. 这是你的选择。

There is one more option. 还有一个选择。 Broadcasting a variable when login happens and resolve that data in dashboard 登录发生时广播变量并在仪表板中解析该数据

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

相关问题 重定向到登录时,Angular-ui-route中的循环问题 - Loop issue in angular-ui-route when redirect to login IE8的angular-ui-route - angular-ui-route with IE8 如何在我的项目中包含angular-ui-route - How To Include angular-ui-route in my project 使用angular-ui-route注入导航栏,但即使浏览器已满比例显示,折叠按钮也会显示在我的导航栏上 - using angular-ui-route to inject a navrbar but the collapse button appears on my navbar even if the browser is full scaled 没有angular-route的angularjs登录页面 - Login Page with angularjs without angular-route Angular ui路由器总是转到默认路由 - Angular ui router going to default route always Angular.js-如何防止用户不登录就进入内页以及如何在成功登录后存储会话 - Angularjs - How to prevent user from going to inner pages without logging in and how to store session upon successfull login 如何限制登录用户在angular js的登录页面或注册页面中移动? - how to restrict logged user to move on login page or signup page in angular js? 成功登录后要返回角度页面吗? - Going back to angular page after successful login? 限制用户登录后重定向到登录页面,即使他按角度按浏览器的后退按钮? - restrict the redirection to login page once the user has already logged in even if he press the back button of browser in angular?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM