如何在AngularJS中处理$rootscope并获取登录用户的用户id?

如何在AngularJS中处理$rootscope并获取登录用户的用户id?,angularjs,authentication,authorization,Angularjs,Authentication,Authorization,我想找到登录用户的ID,并将其显示在页面中。我是个新手,对如何处理一次会议我没有太多的线索 我有一个angular应用程序,它连接到后端API(.net core) 我将展示在网站中使用$rootScope的实例(登录和授权已经启用)。我需要了解这一点来学习应用程序 在App.js中: //Run phase myApp.run(function($rootScope, $state) { $rootScope.$state = $state; //Get state info in v

我想找到登录用户的ID,并将其显示在页面中。我是个新手,对如何处理一次会议我没有太多的线索

我有一个angular应用程序,它连接到后端API(.net core)

我将展示在网站中使用$rootScope的实例(登录和授权已经启用)。我需要了解这一点来学习应用程序

在App.js中:

//Run phase
myApp.run(function($rootScope, $state) {
    $rootScope.$state = $state; //Get state info in view

    //Should below code be using rootScope or localStorage.. Check which one is better and why.

    if (window.sessionStorage["userInfo"]) {

        $rootScope.userInfo = JSON.parse(window.sessionStorage["userInfo"]);
    }

    //Check session and redirect to specific page
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
        if(toState && toState.data && toState.data.auth && !window.sessionStorage["userInfo"]){
            event.preventDefault();
            window.location.href = "#login";
        }       

        if(!toState && !toState.data && !toState.data.auth && window.sessionStorage["userInfo"]){
            event.preventDefault();
            window.location.href = "#dashboard";
        }
    });


});
Users.js:

'use strict';
angular.module('users', []);

//Routers
myApp.config(function($stateProvider) {

  //Login
  $stateProvider.state('login', {
    url: "/login",
    templateUrl: 'partials/users/login.html',
    controller: 'loginController'
  });
//Factories
myApp.factory('userServices', ['$http', function($http) {

    var factoryDefinitions = {
        login: function (loginReq) {
            $http.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
          return $http.post('http://localhost:1783/api/token?UserName='+loginReq.username+'&password='+loginReq.password).success(function (data) { return data; });
      }
}

    return factoryDefinitions;
  }
]);

//Controllers
myApp.controller('loginController', ['$scope', 'userServices', '$location', '$rootScope', function($scope, userServices, $location, $rootScope) {

    $scope.doLogin = function() {

        if ($scope.loginForm.$valid) {  
            userServices.login($scope.login).then(function(result){
                $scope.data = result;
                if (!result.error) {
                    window.sessionStorage["userInfo"] = JSON.stringify(result.data);
                    $rootScope.userInfo = JSON.parse(window.sessionStorage["userInfo"]);
                    //$localStorage.currentUser = { username: login.username, token: result.data };
                    //$http.defaults.headers.common.Authorization = 'Token ' + response.token;
                    $location.path("/dashboard");
                }
            }); 
        }
    };
}]);
我知道有关用户的信息将在$rootScope.userInfo中提供。如果是这样,我如何在其中获取值

如果可能,请举例说明。提前感谢。

一:

myApp.controller('loginController', [
'$scope', 'userServices', '$location', 
'$rootScope', 
function($scope, userServices, $location, $rootScope) {
在控制器内部,注入了
$rootScope
,这使您可以访问该控制器中的
userInfo

因此,如果您将
$rootScope
注入另一个控制器和
console.log($rootScope.userInfo)
您将看到用户数据

myApp.controller('anotherController', ['$scope', '$rootScope', function
 ($scope, $rootScope){

    console.log($rootScope.userInfo) //you'd see the users data from sessionStorage

});
根据quora上的这篇文章

$scope是可从当前组件访问的对象 e、 g控制器,仅限维修$rootScope引用一个对象 它可以从应用程序的任何地方访问。 您可以将$rootScope视为全局变量,$scope视为局部变量


在您的情况下,一旦用户登录到sessionStorage中的密钥“userInfo”,就会创建该密钥,并将相同的数据复制到$rootScope.userInfo。要在登录后检查userInfo中的字段,请尝试

console.log($rootScope.userInfo);
然后在控制台中打印它,或者在浏览器调试器工具中打开会话存储[for chrome open developer tools>applications>sessionstorage>domainname],以查看“userInfo”键中的值

假设你有

{
    uid: "10",
    fullname: "John Doe"
}
您可以使用$rootScope.userInfo.uid或$rootScope.userInfo['uid']访问脚本中的uid

为了防止您无法阅读代码,这里有一个解释

if (window.sessionStorage["userInfo"]) {

    $rootScope.userInfo = JSON.parse(window.sessionStorage["userInfo"]);
}
正在检查用户是否登录

工厂

myApp.factory('userServices', ['$http', function($http) {

var factoryDefinitions = {
    login: function (loginReq) {
        $http.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
      return $http.post('http://localhost:1783/api/token?UserName='+loginReq.username+'&password='+loginReq.password).success(function (data) { return data; });
  }
}
正在调用服务器以获取userInfo对象

$scope.doLogin = function() {

    if ($scope.loginForm.$valid) {  
        userServices.login($scope.login).then(function(result){
            $scope.data = result;
            if (!result.error) {
                window.sessionStorage["userInfo"] = JSON.stringify(result.data);
                $rootScope.userInfo = JSON.parse(window.sessionStorage["userInfo"]);
                //$localStorage.currentUser = { username: login.username, token: result.data };
                //$http.defaults.headers.common.Authorization = 'Token ' + response.token;
                $location.path("/dashboard");
            }
        }); 
    }
};
$scope.doLogin正在调用上述工厂并存储userInfo对象

$scope.doLogin = function() {

    if ($scope.loginForm.$valid) {  
        userServices.login($scope.login).then(function(result){
            $scope.data = result;
            if (!result.error) {
                window.sessionStorage["userInfo"] = JSON.stringify(result.data);
                $rootScope.userInfo = JSON.parse(window.sessionStorage["userInfo"]);
                //$localStorage.currentUser = { username: login.username, token: result.data };
                //$http.defaults.headers.common.Authorization = 'Token ' + response.token;
                $location.path("/dashboard");
            }
        }); 
    }
};