私はnodejs
を初めて使用していますので、認証システムを作成しようとしていました。私はチュートリアルの後にそれを実装しました。 認証されたときにユーザーオブジェクトをフェッチするには、セッションにセッションを格納する必要があります。次のように私はexpress-session
を設定することで、そのようにした:Passport - ユーザーがセッションに保存されていません
require('./config/passport')(passport); // pass passport for configuration
app.use(session({
secret: 'thisisagreatgreatsecretforthesession',
resave: true,
saveUninitialized: true
}));
app.use(morgan('dev'));
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended : false }));
app.use(bodyParser.json());
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(function(req, res, next) {
res.locals.user = req.user;
next();
});
var routes = require('./app/routes')(app, passport);
をし、次のようにパスポートに私はシリアル化およびデシリアライズ機能を設定した:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
私はdeserializeUser
機能で、ユーザコンソールしようとしましたが、それがありました正しい。しかし、私がuser
をテンプレートに呼び出すと、ユーザーが定義されていないことを示すエラーが表示されました。
設定に何か不足していますか?
私は今、どんなエラーも出ませんが、 'user'を使うとテンプレートには何も表示されません。これまでの設定の順序は正しいですか? – omarsafwany
エラーが表示されない場合、テンプレートは 'user'にアクセスできます。ミドルウェアの内部に 'console.log(req.user)'を追加して、実際に値があることを確認することができます(テンプレートのプロパティを使用する必要があるオブジェクトは 'user.username'やそんな感じ)。 – robertklep
'console.log(req.user)'はうまく動作しますが、 '<%user.name%> 'を使用するとテンプレートで – omarsafwany