如何在AngularJS中处理$rootscope并获取登录用户的用户id?
我想找到登录用户的ID,并将其显示在页面中。我是个新手,对如何处理一次会议我没有太多的线索 我有一个angular应用程序,它连接到后端API(.net core) 我将展示在网站中使用$rootScope的实例(登录和授权已经启用)。我需要了解这一点来学习应用程序 在App.js中:如何在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
//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");
}
});
}
};