これを実現するには、session(express-session)を使用できます。 私は現在、この組み合わせを使用しています express、express-session、express-mysql-session(ストレージ用)、facebookとtwitterの戦略を持つパスポート基本的な設定は、このようなものになる可能性があります。
var express = require('express');
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
var app = express();
var options = {
host: '',// Host name for database connection.
port: '',// Port number for database connection.
user: '',// Database user.
password: '',// Password for the above database user.
database: ''// Database name
};
var connection = mysql.createConnection(options);
var sessionStore = new MySQLStore({
checkExpirationInterval: 900000,// How frequently expired sessions will be cleared; milliseconds.
expiration: 86400000,// The maximum age of a valid session; milliseconds.
createDatabaseTable: true,// Whether or not to create the sessions database table, if one does not already exist.
schema: {
tableName: 'sessions',
columnNames: {
session_id: 'session_id',
expires: 'expires',
data: 'data'
}
}
}, connection);
app.use(session({
key: 'MyKey',
secret: 'MySecret',
cookie: {domain: '.mydomain.com', httpOnly: true, secure: false},
domain: '.mydomain.com',
store: sessionStore,
resave: true,
saveUninitialized: true
}));
/**
* Session handle for passport
*/
app.use(passport.initialize());
app.use(passport.session());
/**
* Check if user is authenticated in a route
*/
function authUser (req, res, next) {
if (!req.isAuthenticated()) {
res.redirect('/login')
} else {
next();
}
}
router.get('/hello', authUser, function(req, res){
//Code
});
/**
* Start the server on port defined by configuration
*/
app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'));
ではより多くの情報:応答のための
https://github.com/expressjs/session
https://github.com/chill117/express-mysql-session
ありがとう!私は私のアプリで上記のコードを実装しており、sessionStoreはmysql DBとの会話に成功しています。私はまだこれを使用してログイン状態を維持する方法を考え出すのに苦労しています。私は "loginRequest"と呼ばれるmysqlテーブルを作成し、これは私がtableNameプロパティで使用しているテーブルです。奇妙なことが起こっています。私が自分のサイトのルートにたどり着くたびに、約30のエントリがloginRequestテーブルに入れられます。どうしてこれなの? – user2796352
いいえ...おそらく、ユーザーがルートコードに到達する前に、ユーザーが認証されているかどうかを確認する必要があります。私は各ルートでユーザーを認証するために使用するコードを使って答えを編集します。 – manuerumx
私はちょうどチェックしました....パスポートのdeserialize関数は決して命中しません。これは明らかに大きな問題であり、ログインセッションを継続する前に対処する必要があります – user2796352