2017-02-03 4 views
0

私はほとんどすべてのスレッド、投稿、質問を読んでいましたが、セッションクッキーを設定しましたが、まだ完璧な解決策を得ていませんでした。"req.session.user = user"ユーザが定義されていない

私がログインしていたセッションクッキーを設定するWebアプリケーションを作成していた。

を「ユーザー」は定義されていない理由を把握することができません。私はどこにいませんでしたか?私はエラーを理解するためにあらゆるトレイルとエラーを実行しました。

App.jsは

const session = require('client-sessions');  
app.use(cookieParser()); 

app.use(session({ 
    cookieName: 'sessioncookie', 
    secret: 'long_string_which_is_hard_to_crack', 
    duration: 30 * 60 * 1000, 
    activeDuration: 5 * 60 * 1000, 
})); 

Routes.jsはあなたがfindOne方法であなたのコレクションを照会するとき、それはあなたに(ここuserます関連文書を返します

router.post('/login', (req, res) => { 
      const emaild = req.body.email; 
      const passd = req.body.pass; 

      db.collection('check').findOne({email: emaild}, (err, result) => { 
       if (err) return console.log(err); 
       console.log(result.passcode); 
       console.log('Retrived from database'); 

       bcrypt.compare(passd, result.passcode, function(err, boolean) { 
        console.log(boolean); 
        if(boolean == true) { 
         req.session.user = user; //// It's Undefined 
         res.redirect('/dashboard'); 
        } else { 
         res.send('<h1>Wrong Password</h1>'); 
        } 
      }); 
     }); 
    }); 
+0

* user *はデータベースから取得したアイテムと同じです。ここでは 'result'という名前を付けていますので、' req.session.user = result; 'を使用してください。 – dNitro

+0

req.session.userに変更しました=結果; but still、=>プロパティ 'user'を未定義に設定することはできません。また、データベースから派生したユーザーの電子メールアドレスである "result.email"で試してみました。 –

+0

これは、 'req.session'が未定義であることを意味します。 [client-sessions documentation](https://github.com/mozilla/node-client-sessions)を見ると、セッションがcookieNameプロパティ値でreqに接続されているようです。 'req.sessioncookie.user = result;' – dNitro

答えて

1

をファイルファイルそれをresultと名付けます)、それにはuserのような意味のあるパラメータを付け、次にuserはこのコールバック関数内で利用可能です。あなたが得るとき

はまたreq.session.user = user;に次のエラー:

が未定義

のプロパティ 'ユーザー' を設定することはできませんそれはreq.sessionundefinedであることを意味します。エクスプレスを使用して、sessionをご希望の場合はsession middlewaresで行っています。ここではcookieNameオプション値でセッションを接続するclient-sessionsを使用しています。 ミドルウェアの順序が問題を行うこと

req.sessioncookie.user = user; 

注:あなたは、次のようにそれを設定する必要があります。ルートを設定する前に、ミドルウェアを使用してアプリケーションを設定する必要があります。このようにして、すべての着信要求には、設定した希望の構成が入力されます。

関連する問題