私はかなり長い間このタスクを達成しようとしてきましたが、まだブレークスルーがありません. 誰かがこれで私を助けることができれば、私は本当に感謝しています.
現在の状況:
2 つのサブドメインで実行している 2 つのアプリケーションがあります。
st.localhost:8080 および acm.localhost:8080
ユーザーがいずれかの URL にアクセスしようとすると、Angular の $cookies サービスを使用して「auth」という名前の Cookie を検索します。Cookie が定義されているか存在する場合、ユーザーは元のアプリケーションにリダイレクトされます。ただし、Cookie が定義されていない場合、ユーザーはログイン ページにリダイレクトされます (ログイン ページは両方のアプリケーションに存在します)。
ログインページから、資格情報の確認が成功した後、「auth」 Cookie をランダムな値で再度設定しました。この Cookie は、2 つのサブドメイン間で共有されるはずです。
特急:
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;
});
}
}
/login サービス応答で Set-Cookie ヘッダーを確認できるため、Express は Cookie 'auth' を正常に作成できます。ただし、ブラウザーは、アプリケーション (st.localhost など) から作成している後続の API 要求にこの Cookie を添付していません。Angular でもこの Cookie を読み取ることができません。
var obj = $cookies.getObject('auth');
console.log("auth is: " + obj);
obj が未定義になります。
サブドメインの 1 つから Cookie のドメインを「localhost」として設定する方法に問題があると感じています。
私が間違っているかもしれないことについて何か提案はありますか?
前もって感謝します。