我一直在努力完成这项任务,但还没有任何突破。如果有人能帮助我解决这个问题,我将非常感激。
现在的情况:
我有两个应用程序在两个子域中运行
st.localhost:8080 和 acm.localhost:8080
当用户尝试访问其中一个 URL 时,我使用 Angular $cookies 服务搜索名为“auth”的cookie。如果 cookie 已定义或存在,则用户将被重定向到原始应用程序。但是,如果 cookie 未定义,用户将被重定向到登录页面(登录页面位于两个应用程序中)。
在登录页面中,在成功检查凭据后,我再次使用随机值设置了“auth” cookie。该 cookie 应该在两个子域之间共享。
表达:
var express = require('express');
var httpProxy = require('http-proxy');
var vhost = require('vhost');
var app = express();
var proxy = httpProxy.createProxyServer();
app.get('/login', function(req, res) {
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
var expireDate = new Date();
expireDate.setDate(expireDate.getDate() + 1);
res.cookie('auth', randomNumber, { maxAge: 90000000, domain: 'localhost', httpOnly: false });
console.log('cookie created successfully');
res.send('Login successful');
});
app.use('/api', function(req, res) {
req.headers[ 'Authorization' ] = 'Basic dXNlcjpwYXNzd29yZA==';
console.log("Request cookies: " + req.cookie);
proxy.web(req, res, { target: 'restApiTarget' });
});
// ST application
app.use(vhost('st.localhost', express.static('./st')));
// ACM application
app.use(vhost('acm.localhost', express.static('./acm')));
app.listen(8080, function () {
console.log('Fweb server running on port 8080!');
});
角
以下登录功能由 ST 和 ACM 应用程序共享
$scope.login = function(formValid){
$scope.incorrectCredentials = false;
if(formValid){
$http.get('/login',
{
params: {
username: $scope.username,
password: $scope.password
},
headers : {
'Accept' : 'application/json'
}
}
).then(function(response){
$scope.incorrectCredentials = false;
var obj = $cookies.getObject('auth');
console.log("auth is: " + obj);
$state.go($stateParams.origin);
}, function(response){
$scope.incorrectCredentials = true;
});
}
}
Express 能够成功创建 cookie 'auth',因为我可以在 /login 服务响应中看到 Set-Cookie 标头。但是,浏览器不会将此 cookie 附加到我从应用程序(例如 st.localhost)发出的后续 API 请求中。我也无法通过 Angular 读取此 cookie。
var obj = $cookies.getObject('auth');
console.log("auth is: " + obj);
导致 obj 未定义。
我感觉我将 cookie 的域设置为子域之一的“localhost”的方式有问题。
关于我可能做错了什么的任何建议?
提前致谢。