そのため、基本的にはセッションを使用してユーザー名を保存し、ユーザーがログインしているかどうかを確認したいと思います。そうでない場合、ページはログインページにリダイレクトされます。
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){
このエラーが発生するのはなぜですか?セッションはアプリ全体に対してグローバルではありませんか?それとも私はここで何かが完全に欠けていますか?.
前もって感謝します!
Cookieとセッション処理を設定する行の前でapp.use(app.router)
を実行している場合は、それらの後に移動してみてください。それは私にとって同じ問題を修正しました。
私は彼が最後の数時間、まったく同じ問題を解決しようとしていました。
次のようにサーバーを初期化してみてください。
var app = express.createServer(
express.cookieParser(),
express.session({ secret: "crazysecretstuff"})
);
それはうまくいくはずです。
正常に設定されていることがわかっているセッション変数が未定義になるという同じ問題がありました。
私の場合、クロスオリジンリクエストが原因であることが判明しました。リクエストのwithCredentialsヘッダーを忘れていました。
したがって、たとえばクライアント側ではAngularアプリでこれを行う必要がありました:
var config = { withCredentials: true };
return $http.get(appConfig.apiUrl + '/orders', config);
そしてExpressではこれ:
res.header('Access-Control-Allow-Credentials', true);
構成(config.json?)のsessionSecret
は空でない必要があります。
sessionSecret: "something other than an empty string",