23

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

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){

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

前もって感謝します!

4

4 に答える 4

71

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

于 2011-04-09T13:20:02.083 に答える
4

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

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

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

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

于 2011-04-08T20:22:54.143 に答える
0

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

sessionSecret: "something other than an empty string",

于 2014-07-14T22:36:48.263 に答える
0

私が知っていたセッション変数が未定義になるという同じ問題がありました。

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

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

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

そしてExpressでこれ:

res.header('Access-Control-Allow-Credentials', true);
于 2014-03-10T22:53:58.257 に答える