web-dev-qa-db-ja.com

express、couchDB、node.jsでセッションを使用する方法

そのため、基本的にはセッションを使用してユーザー名を保存し、ユーザーがログインしているかどうかを確認したいと思います。そうでない場合、ページはログインページにリダイレクトされます。

Node.js、express、couchDBを使用しています。

これが私のセッションの設定方法です

var MemoryStore = require('connect').session.MemoryStore;
app.use(express.cookieParser());
app.use(express.session({ 
    secret: "keyboard cat", 
    store: new MemoryStore({ 
        reapInterval: 60000 * 10
    })
}));

セッションに何かを保存するには、次のコードを使用しますか?

req.session = {user:name);

したがって、セッション変数は私のログインページで機能しているようです。ユーザーの名前をセッションに正常に保存しましたが、別のページでセッション変数にアクセスしようとすると、エラーが発生します

Cannot read property 'user' of undefined

私がしているのは:

if (req.session.user){

このエラーが発生するのはなぜですか?セッションはアプリ全体に対してグローバルではありませんか?それとも私はここで何かが完全に欠けていますか?.

前もって感謝します!

23
Ernesto11

Cookieとセッション処理を設定する行の前でapp.use(app.router)を実行している場合は、それらの後に移動してみてください。それは私にとって同じ問題を修正しました。

71
Mike Scott

私は彼が最後の数時間、まったく同じ問題を解決しようとしていました。

次のようにサーバーを初期化してみてください。

var app = express.createServer(
express.cookieParser(),
express.session({ secret: "crazysecretstuff"})
  );

それはうまくいくはずです。

4
marc_d

正常に設定されていることがわかっているセッション変数が未定義になるという同じ問題がありました。

私の場合、クロスオリジンリクエストが原因であることが判明しました。リクエストのwithCredentialsヘッダーを忘れていました。

したがって、たとえばクライアント側ではAngularアプリでこれを行う必要がありました:

var config = { withCredentials: true };
return $http.get(appConfig.apiUrl + '/orders', config);

そしてExpressではこれ:

res.header('Access-Control-Allow-Credentials', true);
0
Mister P

構成(config.json?)のsessionSecretは空でない必要があります。

sessionSecret: "something other than an empty string",

0
Victor Pudeyev