2012-07-13 3 views
4

나는 [email protected][email protected]를 사용하고 로컬 srategy를 인증에 사용하고 있습니다. 인 (은 3.0과 여권 인증

모든 것이 잘 작동하는 것 같다 그것은 성공과 제대로 실패

app.post('/login', passport.authenticate('local', { failureRedirect: '/' }), 
function(req, res) { 
    console.log(req.isAuthenticated()); // true 
    res.redirect('/users/' + req.user.id); 
}); 

에 리디렉션하지만 프로필 노선에 ensureAuthenticated를 추가하면

app.get('/users/:id', ensureAuthenticated, routes.user); 

function ensureAuthenticated(req, res, next) { 
    console.log(req.isAuthenticated()); // false 
    if (req.isAuthenticated()) { return next(); } 
    res.redirect('/'); 
} 

는 '/'로 다시 저를 리디렉션 로그인 페이지) 대신 '/ users/id'(사용자 프로필)을 입력하십시오. 문제는 req.isAuthenticated()가 항상 false를 반환하고 디버그에 req.user 변수가 없다는 것입니다.

익스프레스 3 및 여권 상호 작용에 문제가 있습니까? 아니면 제가 잘못 했습니까?

답변

0

authenticate()는 미들웨어입니다. 워드 프로세서에서 :

app.post('/login', 
    passport.authenticate('local', { failureRedirect: '/login' }), 
    function(req, res) { 
    res.redirect('/'); 
    }); 
+0

그것을 사용하는 sipmlest 방법이며 아무것도 변경되지 않습니다 . 여전히 req.isAuthenticated()가 false 인 경우 '/ login'에 redirectin을 '/'rout에 추가하면 req.isAuthenticated()가 항상 false이므로 잘못된 라우팅이 발생합니다. – Yuri

+0

오, 안돼! 사실 지금은 사실이지만 리디렉션이 잘못되었습니다. app.get ('/ profile', ensureAuthenticated, routes.profile); – Yuri

+0

예, ensureAuthenticated를/login 경로에 두지 마십시오. 그리고 ensureAuthenticated 함수에서/login으로 리디렉션합니다. – jabbermonkey

0

문제는 내가 curl -L -d "name=Test&password=1" 그것을 테스트하고 내가 예상대로 curl -L가 작동하지 않는 것이 었습니다. 하지만 그것은 웹 브라우저에서 잘 작동합니다.

+0

게시물 데이터가 정말로'name : Test & password : 1'라고 입력하면 작동하지 않는 것은 당연합니다. 그것은'name = Test & password = 1'이어야합니다. – kay

+0

물론, 유효한 요청이었습니다. 나는 단지 그것을 여기에서 잘못 설명했다. – Yuri

1

나는 비슷한 문제가 있었지만 세션 데이터 용 데이터 저장소를 지정하지 않고 명시 적 세션을 사용했기 때문에 나왔다. 즉, 세션 데이터가 RAM에 저장된다는 의미 였고 여러 작업자를 사용했기 때문에 세션 저장소가 작업자간에 공유되지 않았습니다. 나는 표현 세션을 RedisStore 대신 사용하도록 재구성했고, isAuthenticated()은 예상대로 true를 반환하기 시작했다.

app.use express.session 
    secret: '...' 
    store: new RedisStore 
     host: redisUrl.hostname 
     port: redisUrl.port 
     db: ... 
     pass: ... 
0

나는 또한 여러 해 동안이 문제로 어려움을 겪고있었습니다. 어떤 날 세션 쿠키의 maxAge 속성을 변경하고 그것을 고정 - 그것은 전에 너무 낮은 :이 변경 후

app.use(express.cookieParser()); 
app.use(express.session({ 
    secret: config.session.secret, 
    cookie: { 
    maxAge: 1800000, //previously set to just 1800 - which was too low 
    httpOnly: true 
    } 
})); 

req.isAuthenticated() 사실 반환

관련 문제