1. ホーム
  2. node.js

Node.js + express.js + passport.js : サーバ再起動時の認証を維持する。

2023-10-21 16:09:25

質問

私はnodejs + express.jsアプリケーションで認証を処理するためにpassport.jsを使用しています。私はmongodbからユーザーを取得するためにLocalStrategyを設定しました。

私の問題は、次のとおりです。 ノードサーバを再起動すると、ユーザが再認証しなければならないことです。 . これは、私が活発にそれを開発しており、再起動のたびにログインしたくないので問題です...(+私はノードスーパバイザを使用しています)。

以下は私のアプリのセットアップです。

app.configure(function(){
    app.use('/static', express.static(__dirname + '/static'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session({secret:'something'}));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(app.router);
});

そして、セッションのシリアライズの設定.

passport.serializeUser(function(user, done) {
    done(null, user.email);
});

passport.deserializeUser(function(email, done) {
    User.findOne({email:email}, function(err, user) {
        done(err, user);
    });
});

あるブログで紹介されていた解決策(もう存在しないのでリンクを削除しました)をconnect-mongodbを使って試しましたが、成功しませんでした。

app.use(express.session({
    secret:'something else',
    cookie: {maxAge: 60000 * 60 * 24 * 30}, // 30 days
        store: MongoDBStore({
        db: mongoose.connection.db
    })
}));

EDIT 追加問題 : 1つの接続しかできない (1つの接続に制限のあるmongohq無料サービスの使用)

編集2 解決策 (私の評価は低いので、今頃私の質問に答えるための版として)

これは私が最終的に見つけた解決策で、マングースによる接続を使用しています。

app.use(express.session({
    secret:'awesome unicorns',
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(
        {db:mongoose.connection.db},
        function(err){
            console.log(err || 'connect-mongodb setup ok');
        })
}));

どのように解決するのですか?

というオープンソースがあります。 connect-mongo これはまさにあなたが必要とすることを行います - mongodbにセッションデータを永続化します。

の使用例 (再利用された mongoose が開かれた接続) :

var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/sess');
app.use(express.session({
    secret:'secret',
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(
    // Following lines of code doesn't work
    // with the connect-mongo version 1.2.1(2016-06-20).
    //    {db:mongoose.connection.db},
    //    function(err){
    //        console.log(err || 'connect-mongodb setup ok');
    //   }
    {mongooseConnection:mongoose.connection}
    )        
}));

については、こちらで詳しく説明しています。 https://github.com/kcbanner/connect-mongo