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
関連
-
[解決済み】MongoDBのデータ/DBが見つからない
-
[解決済み】「npm install」と「npm rebuild」の違いとは?
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] バルク更新を行う。
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] Node.js クイックファイルサーバ (静的ファイルオーバーHTTP)
-
[解決済み] Node.JSを使用して、JSONファイルを(サーバー)メモリに読み込むにはどうすればよいですか?
-
[解決済み] node.jsの__dirnameと./の違いは何ですか?
-
[解決済み】Node.js / Express.js - app.routerはどのように動作するのですか?
-
[解決済み】express.jsのapp.useとapp.getの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー: nodejs の get 呼び出しで getaddrinfo ENOTFOUND が発生しました。
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み] (node:63208) DeprecationWarning: collection.ensureIndex は非推奨です。代わりにcreateIndexesを使用してください [重複]。
-
[解決済み】モジュール 'internal/util/types' が見つかりません。
-
[解決済み】MongooseでEnumを作成し使用する方法
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] ExpressJS : res.redirect()が期待通りに動作しない?
-
[解決済み] エラーです。Cannot find module 'ejs'
-
[解決済み] npm not able to find a fileに関連するエラーは何が原因でしょうか?node_modules サブフォルダ内にコンテンツがありません。なぜでしょうか?