Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将一个工厂注入angularjs 1中的另一个工厂并向angularjs应用程序发送令牌_Angularjs_Authentication_Dependency Injection_Single Sign On - Fatal编程技术网

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

无法将一个工厂注入angularjs 1中的另一个工厂并向angularjs应用程序发送令牌,angularjs,authentication,dependency-injection,single-sign-on,Angularjs,Authentication,Dependency Injection,Single Sign On,我有一个php应用程序。我希望此应用程序驻留在我的主域(primarydomain.com)中,专门用于单次登录(管理帐户详细信息)。每个用户在此登录并成功登录后,重定向到first.primarydomain.com上托管的我的一个应用程序。重定向后,通过检查用户是否确实登录来授权用户。 现在我在first.primarydomain.com上托管了一个angularjs应用程序 在我的angularjs项目中,我创建了一个工厂文件,其中包含两个工厂 1.数据 2.授权 数据用于数据库操作,而

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

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

数据用于数据库操作,而身份验证用于授权检查和注销用户

下面是我的代码

App.js
/*初始化全局设置并运行应用程序*/
运行([“$rootScope”,“settings”,“$state”,“$location”,“Auth”,函数($rootScope,settings,$state,$location,Auth){
$rootScope.$state=$state;//要从视图访问的状态
$rootScope.$on(“$stateChangeStart”),函数(事件、toState、toParams、fromState、fromParams){
if(!$rootScope.authenticated | |$rootScope.authenticated==false){
var用户;
Auth.isLoggedIn()
user=JSON.parse(localStorage.getItem('currentUser');
console.log(用户)
如果(!用户){
window.location=”http://primarydomain.com/login"
}否则{
//this.authenticated=true;
//this.loggedUser=用户;
$rootScope.authenticated=true;
$rootScope.loggedUser=用户;
} 
}
//console.log($state)
});

}]);
通过更改

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


您没有从isLoggedIn函数返回值。下面是一个简单的示例,说明它需要如何工作:

return $http.get(url).then((res) => {
  return res.data;
}
请注意所使用的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;
});

谢谢你的快速回复。事实上,数据工厂在另一场比赛中仍然工作得很好,我直接在我的任何一个控制器中使用它。有人请帮忙。这是不是意味着这里没有人还做angularjs?这太可怕了。谢谢你。我不知道到底发生了什么,但我想相信我做得不对。我真的工作了。谢谢你u、 但还有一件事,有没有一种方法可以将令牌传递给angularjs应用程序,通知会话id作为从php到angularjs项目的握手?您可以调用php
$http.get('php/session.php')。然后((res)=>{session.create(res.data);
并从
会话开始();
$sess=array();
sess[“session\u id”]=$\u session['session\u id']
返回$sess;
如果这是您要问的问题,非常感谢您,我真的非常感谢您。实际上,我的php应用程序专门用于在主域上注册帐户和登录控制,而我的angularjs应用程序位于另一个子域上。在主域上成功登录后,它将重定向到angularjs应用程序位于子域上。我需要从php应用程序向angularjs应用程序传递一个令牌。如何实现此目的?我是否可以通过浏览器cookie或url参数接收此类令牌?您尝试实现的任何解决方案都会产生安全问题。跨域会话可以作为url中的查询传递,但这将l公开用户会话。我建议研究跨源资源共享,请问,是否有必要在angularjs中设置全局变量或常量变量?
return Data.get('/webpass/1').then(function(datas){
  /* Some code here */
  return datas.response;
});