无法在angularjs 1中将一个工厂注入另一个工厂并将令牌发送给angularjs应用程序
我有一个应用程序,它是一个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.
请帮助。
检查是否有任何注射的问题,通过改变
app.factory("Data", ['$http', '$location', function ($http, $q, $location) {
到
app.factory("Data", ['$http', '$q', '$location', function ($http, $q, $location) {
你是不是从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;
});
谢谢。我实际上并不知道发生了什么,但我想相信我没有做对。我实际上工作。谢谢。但还有一件事,有没有办法将令牌传递给angularjs应用程序,并将session_id作为从PHP到angularjs项目的握手通知? –
您可以调用PHP'$ http.get('php/session.php')。然后((res)=> {Session。创建(res.data);});'并从'session_start();'返回一个会话,$ sess = array();','sess [“session_id”] = $ _SESSION ['session_id']; ','return $ sess;'如果这就是你要求的 –
非常感谢你,我真的很感激你。其实我有PHP应用程序故意为我的主域上的帐户注册和登录控制,而我的angularjs应用程序在另一个子域。在主域上成功登录后,它将重定向到子域上的angularjs应用程序。我需要将一个令牌传递给php应用程序中的angularjs应用程序。如何做到这一点?无论如何,我可以通过浏览器cookie或url参数接收这样的令牌吗? –
谢谢你的快速反应。实际上数据工厂仍然在另一场比赛中完美运行,我直接在我的任何控制器中使用它。 –
有人请求帮助。这是否意味着没有人还在做angularjs?这是杀人。 –