我在CloudFlare后面有一个快速应用程序。在开发中,Set-Cookie标头在登录时传递,但在CloudFlare后面,不传递Set-Cookie标头。有什么建议吗?我的配置是:
```javascript
const secret = 'foo';
const authenticationMiddleware = (req,res,next) => {
console.log('authenticated',req.isAuthenticated());
如果(req.isAuthenticated()) {
next();
} else if (req.url.includes('/rest/')) {
res.status(401).send('Unauthorized');
}否则{
res.status(302).redirect('/admin/login');
}
};
const sessionSecurity =(应用程序) => {
App.set(‘信任代理’,1);
App.use(cookieParser(秘密));
app.use(
session({
secret,
proxy: true,
saveUninitialized: false,
resave: false,
maxAge: null,
cookie: {
path: '/admin',
secure: process.env.NODE_ENV === 'production',
},
}),
);//会话密码
app.use(passport.initialize());
app.use(passport.session());
Passport.use(新LocalStrategy(localPassport.local));
Passport.serializeUser((用户,完成)) => {
done(null, user.id);
});
passport.deserializeUser(localPassport.deserializeUser);
app.post('/admin/login',(req,res,next) => {
passport.authenticate('local', (authErr, user) => {
if (authErr) return next(new Error(authErr));
if (!user) {
return res.sendStatus(401);
}
return req.logIn(user, (loginErr) => {
if (loginErr) return res.sendStatus(401);
return res.sendStatus(200);
});
})(req, res, next);
});
注销(‘/app.post/logout’,(req,res) => {
req.logOut();
req.session.destroy(() => {
res
.clearCookie('connect.sid', { path: '/admin' })
.sendStatus(200);
});
});
app.get('/admin/rest/*',authenticationMiddleware);
app.get('/admin/rest/status',(req,res) => {
res.sendStatus(200);
});
};
发布于 2017-09-24 05:37:57
这是因为服务器设置设置为cookie安全,而CloudFlare和我的服务器之间的连接不安全。
发布于 2018-06-08 06:47:28
在cloudflare的设置(加密选项卡)中,我打开了“认证回源”,在"app.js“(从我的应用程序)中,在app.use(session({...})
之前添加此app.set('trust proxy', 1);
,我的问题就解决了。
https://stackoverflow.com/questions/46293364
复制相似问题