2016-09-26 2 views
0

Passport.js에 대한 사용자 지정 콜백 문제를 이해하는 데 문제가 있습니다. 끝에 (req, res, next)을 이해하지 못합니다. 우리가 폐쇄로부터 이러한 가치를 가져야 하는가?Passportjs 콜백, 인수 이해

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.username); 
    }); 
    })(req, res, next); //<=== What is the purpose of this? 
}); 
+0

자체 호출 기능입니다. req, res 및 next를 params로 전달하고 있습니다. https://jsfiddle.net/ccestd3o/ – yBrodsky

답변

1

passport.authenticate()middleware입니다. 간단히 말해서, 미들웨어는 요청을 수정 한 다음 다음 요청 처리기로 전달하는 기능입니다. express의 요청 처리기는 인수로 (req, res, next)을 사용하는 함수입니다. passport.authenticate이 미들웨어을 반환하는 함수이며, 인수는 (req, res, next)입니다.

일반적으로, 다음과 같이 사용됩니다 : passport.authenticate()는 요청을 수정합니다 이에, 다음, 확인 사용자가 인증되어 있는지 확인합니다 다음 핸들러에 함께 전달할

app.get('/login', passport.authenticate()); 

. 이 경우

, 우리는 passport.authenticate가 좀 더하고 싶은, 그래서 우리는 대체 : 동등한와

app.get('/login', passport.authenticate()); 

:

app.get('/login', function (req, res, next) { 
    passport.authenticate()(req, res, next) 
}); 

하고 더 로직은 passport.authenticate 생성자에 추가됩니다.

+0

오, 그건 의미가 있습니다. 일반적으로 미들웨어로 사용될 때는 req, res, next 인수를 사용하여 호출됩니다. 이 인스턴스에서는 일반 미들웨어로 사용하지 않으므로 이러한 값을 전달해야합니다. – Elliot

0

예 (req, res, next)는 해당 값을 라우터 컨텍스트에서 passport.authenticate 함수로 전달합니다. 내가 당신이라면 라우터에 대한 미들웨어도 살펴볼 것입니다. (익스프레스?) - 여기에있는 세분화 된 방법보다는 경로에 인증을 추가하는 쉬운 방법입니다. 모든 경로에 passport.auth를 추가해야합니다. 당신은 인증을 원했습니다).