포트 3000 인증에 Passport.js를 사용하는 노드 응용 프로그램을 실행 중입니다. Nginx는 프록시 서버로 사용되어 포트 80에서 수신 대기하고 프록시는 포트 3000에 대한 요청. Passport.js는 사용자의 인증에 사용됩니다.인증 문제 Passport 및 Nginx 프록시 서버로 Node.js
인증 프로토콜은 다음과 같습니다. 사용자가 example.com을 요청하고 로그인하지 않은 경우 example.com/login으로 리디렉션됩니다. 성공적인 로그인 후 사용자는 다시 example.com으로 리디렉션됩니다.
문제
내가 (고객이 동일한 문제를 가지고로 의심되는) 익스플로러 9 아이 패드 사파리 6을 사용하여 인터넷에 로그인을 시도하고있을 때 발생합니다. 올바른 자격 증명을 사용하는 경우 example.com/ 대신 example.com/login으로 리디렉션됩니다.예를 들어 크롬 40에서는 문제가 발생하지 않습니다.
- Safari에서 example.com:3000을 사용하여 nginx를 피할 때 문제가 발생하지 않습니다.
- 악화시키기 : 때때로 명백한 이유없이 작동합니다.
Nginx와 관련이 있고 파일 요청 순서와 관련이 있다고 생각됩니다.
Nginx의 구성 : 응용 프로그램 코드의
server {
listen 80;
location/{
proxy_pass http://127.0.0.1:3000;
}
}
부 : 나는 사람이 나를 도울 수 있는지 궁금
app.post('/api/login', function (req, res, next) {
passport.authenticate('local-login', function (err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.status(401).send(info);
}
req.logIn(user, function (err) {
if (err) {
return next(err);
}
return res.send({
username: user.username
});
});
})(req, res, next);
});
app.get('/', isLoggedIn, function (req, res) {
res.sendFile(__dirname + '/client/views/index.html');
});
function isLoggedIn(req, res, next) {
if (!req.isAuthenticated()) {
res.redirect('/login');
} else {
next();
}
}
. 필요한 경우 추가 코드 또는 설명을 제공해 드리겠습니다.
공유해 주셔서 감사합니다.;-) – mzalazar
+1은 다른 수정 프로그램이 도움이되지 않는 Internet Explorer의 캐싱 문제를 해결하여 솔루션을 공유해 주신 것을 높이 평가합니다. –