2016-05-31 11 views
1

複数のポートの単一サーバー上でExpressセッションを使用して複数のMEANアプリケーションを実行しています。アプリケーションAに認証すると、もう一方(アプリケーションB)に確立されたトークンが変更されます。その後、アプリケーションBの認証されたユーザーセッションは拒否されます。単一サーバー、異なるポート上での明示セッション・アプリケーションの複数Express

トークンを個別に保持して検証するには、どのようにアプリケーションを構成するのですか?たとえば、localhostでは、アプリケーションAはポート80で動作し、アプリケーションBはポート90で動作します。ユーザーが別のユーザーのアプリケーションBセッションを中断することなくアプリケーションAを認証して使用できるようにしたいとします。ここで

は私の問題に関連するべきである私のapp.jsファイル内のコードである:(にセッション識別子を格納するために使用されている)

// Connect to database 
mongoose.connect(config.mongo.uri, config.mongo.options); 

var connection = mongoose.createConnection(config.mongo.uri, config.mongo.options); 

var app = express(); 

// enable CORS 
app.use(cors()); 

// enable cookieParser 
app.use(cookieParser()); 

// enable session 
app.use(session({ 
    secret: config.secrets.session, 
    resave: false, 
    saveUninitialized: true, 
    name: 'uniqueSessionId', 
    store: new MongoStore(
     { 
      mongooseConnection: connection 
     } 
    ) 
})); 

答えて

1

クッキーが与えられたホスト名のすべてのポート間で共有されていますこれはあなたのアプリが互いに干渉している理由です

express-sessionのドキュメントは、次のことを示唆している:

あなたが同じホスト名で実行されている複数のアプリを持っている場合(これはすなわちlocalhostまたは127.0.0.1、名前だけで、異なるスキームとポートは別のホスト名に名前を付けていません)、セッションクッキーを互いに分離する必要があります。最も簡単な方法は、アプリケーションごとに異なるnameを設定することです。

+0

ドキュメントごとに、セッションオブジェクトを一意の名前を使用して変更しようとしましたが、動作しませんでした。 2つのアプリケーションは、依然として相互に干渉しています。 – Bibble

+0

古いクッキーも削除しましたか? – robertklep

+0

はい、アプリケーションのCookieの新しい名前と「トークン」という名前のCookieが表示されます。私は1つではなく、それぞれのアプリケーションのためにトークンクッキーが必要かどうか疑問に思っていますか?トークンクッキーは各アプリケーションによって変更され続けるものです。 – Bibble

関連する問題