0

我有一个应用程序,它是一个php应用程序。我希望此应用程序驻留在我的主域中(primarydomain.com故意用于单点登录(用于管理帐户详细信息)。每个用户在此登录并成功登录后,重定向到托管在first.primarydomain上的一个应用程序。 COM。重定向后,通过检查用户在登录真正的授权用户。 现在我主持的first.primarydomain.com无法在angularjs 1中将一个工厂注入另一个工厂并将令牌发送给angularjs应用程序

在我angularjs项目的angularjs应用程序,我创建了有2个工厂出厂文件 1.数据 2.验证。

数据是用于数据库操作,而验证是指用于授权检查和注销用户。

以下是我的代码。

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> 

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

另一个问题是,在primarydomain.com上成功登录后,我想发送一个令牌,并在first.primarydomain.com旁边包含一些用户信息和访问详细信息。请,我如何做到这一点与angularjs 1.

请帮助。

回答

1

检查是否有任何注射的问题,通过改变

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

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

谢谢你的快速反应。实际上数据工厂仍然在另一场比赛中完美运行,我直接在我的任何控制器中使用它。 –

+0

有人请求帮助。这是否意味着没有人还在做angularjs?这是杀人。 –

0

你是不是从isLoggedIn函数返回值。它是如何需要一个简单的例子来工作:使用

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

声明同时回报,因为我们还需要返回一个承诺,以及它的价值。

你没有返回承诺:

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; 
}); 
+0

谢谢。我实际上并不知道发生了什么,但我想相信我没有做对。我实际上工作。谢谢。但还有一件事,有没有办法将令牌传递给angularjs应用程序,并将session_id作为从PHP到angularjs项目的握手通知? –

+0

您可以调用PHP'$ http.get('php/session.php')。然后((res)=> {Session。创建(res.data);});'并从'session_start();'返回一个会话,$ sess = array();','sess [“session_id”] = $ _SESSION ['session_id']; ','return $ sess;'如果这就是你要求的 –

+0

非常感谢你,我真的很感激你。其实我有PHP应用程序故意为我的主域上的帐户注册和登录控制,而我的angularjs应用程序在另一个子域。在主域上成功登录后,它将重定向到子域上的angularjs应用程序。我需要将一个令牌传递给php应用程序中的angularjs应用程序。如何做到这一点?无论如何,我可以通过浏览器cookie或url参数接收这样的令牌吗? –