无法将一个工厂注入 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;
});
我有一个 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;
});