无法将一个工厂注入 angularjs 1 中的另一个工厂并将令牌发送到 angularjs 应用程序

Unable to inject one factory into another factory in angularjs 1 and send token to angularjs application

我有一个 php 应用程序。我希望此应用程序驻留在我的主域中(primarydomain.com 专门用于单点登录(以管理帐户详细信息)。每个用户在这里登录并成功登录后,首先重定向到我托管的一个应用程序。 primarydomain.com. 重定向后,通过检查用户是否真的登录来授权用户。 现在我首先托管了一个angularjs应用程序。primarydomain.com

在我的 angularjs 项目中,我创建了一个包含 2 个工厂的工厂文件 1.数据 2. 授权

Data用于数据库操作,Auth用于授权检查和用户注销

下面是我的代码。

App.js

 /* Init global settings and run the app */
app.run(["$rootScope", "settings", "$state", "$location", "Auth", function($rootScope, settings, $state, $location, Auth) {
  $rootScope.$state = $state; // state to be accessed from view
    $rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) {
      if (!$rootScope.authenticated || $rootScope.authenticated==false){
        var user;
        Auth.isLoggedIn()
        user=JSON.parse(localStorage.getItem('currentUser'));
        console.log(user)
        if(!user){
          window.location="http://primarydomain.com/login"
        }else{
          //this.authenticated=true;
          //this.loggedUser=user;
          $rootScope.authenticated = true;
          $rootScope.loggedUser =user;
        } 
      }
      //console.log($state)  
    });
}]);

//Factory.js
//Data. factory
//do some database query
app.factory("Data", ['$http', '$location', function ($http, $q, $location) {

  var serviceBase = 'server/f3';

  var obj = {};

  obj.get = function (q) {
      //alert(q)
      return $http.get(serviceBase + q).then(function (results) {
          return results.data;
      });
  };
  obj.gets = function(q,config){
    return $http.get(serviceBase + q,config);
  }
  obj.post = function (q, object) {
      return $http.post(serviceBase + q, object).then(function (results) {
          return results.data;
      });
  };
  obj.posts = function (q, object) {
    return $http.post(serviceBase + q, object, {
        transformRequest: angular.identity,
        headers: {'Content-Type': undefined,'Process-Data': false}
      }
    )
  .then(function (results) {
            return results.data;
        })
  };
  obj.put = function (q, object) {
      return $http.put(serviceBase + q, object).then(function (results) {
          return results.data;
      });
  };
  obj.delete = function (q) {
      return $http.delete(serviceBase + q).then(function (results) {
          return results.data;
      });
  };
  return obj;
}]);



app.factory('Auth', ['$http', '$location','Data', function ($http,$location,Data){
        var obj = {};

        obj.isLoggedIn = function(){
            var user=JSON.parse(localStorage.getItem('currentUser'));
            if(!user){
                Data.get('/webpass/1').then(function(datas){

                    if(datas.type==1){
                        //alert('response good')
                        //console.log(datas.response)
                        localStorage.setItem('currentUser', JSON.stringify(datas.response)); 
                        return datas.response;
                    }else{
                        return false;
                    }
                });
            }else{
                //alert('deji')
                return (user)?user:false;   
            }            
        };

        obj.Logout= function(){
            //console.log('deji')
            Data.get('/logout').then(function(datas){
                //console.log(datas)
                if(datas.type==1){
                    localStorage.removeItem('currentUser');
                    return true;
                }else{
                    return false;
                }
            });
        };
        return obj;
    }]);

<!-- end snippet -->

//Logout controllers
app.controller('LogoutController', function($rootScope, $scope, $location, Auth) {

    Auth.Logout();
    var user=JSON.parse(sessionStorage.getItem('currentUser'));
    if(!user){
        $rootScope.authenticated=false;
        $rootScope.loggedUser=null;
        window.location='http://primarydomain/login';
    }else{
        //alert('Unable to log user out')
        $location.path('/dashboard');
    }

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js"></script>

在工厂中,工厂函数none可以调用注入的工厂。它实际上并没有给出任何错误,但是在跟踪执行流程时,我意识到它甚至没有执行工厂的那部分。

另一个问题是,在 primarydomain.com 上成功登录后,我想在第一个 primarydomain.com 旁边发送一个令牌,其中包含一些用户信息和访问详细信息。拜托,我该如何使用 angularjs 1.

请帮忙。

通过更改

检查您是否有任何注入问题
app.factory("Data", ['$http', '$location', function ($http, $q, $location) {

app.factory("Data", ['$http', '$q', '$location', function ($http, $q, $location) {

您没有return使用 isLoggedIn 函数的值。它需要如何工作的一个更简单的例子:

return $http.get(url).then((res) => {
  return res.data;
}

注意都使用了 return,因为我们还需要 return Promise 及其值。

您未能return承诺:

Data.get('/webpass/1').then(function(datas){
  /* Some code here */
  return datas.response;
});

应该是:

return Data.get('/webpass/1').then(function(datas){
  /* Some code here */
  return datas.response;
});