2016-07-23 6 views
0

잠시 동안 가능하고 아무 것도 찾지 못했는지 검색했습니다.여권 OAuth 무기명 또는 isAuthenticated

기본적으로 사용자 인증을 처리하기 위해 Passport을 사용하고 있습니다. 물론 Node.js와 Express를 사용하여 서버 측면을 처리 할 수 ​​있습니다. 또한 oauth2orize을 사용하여 OAuth를 허용하고 API 호출을 처리합니다.

API 호출의 경우 passport.authenticate('bearer', { session: false })을 실행하는 미들웨어 controllerClient.isBearerAuthenticated을 사용합니다. 그런 다음 해당 기능이 실행되어 passport.use("bearer", new BearerStrategy) 내부의 기능을 실행합니다. 기본적으로 토큰이 유효한지 확인하고 콜백 함수를 호출합니다.

API 요청이 아닌 경우에만 일반 웹 페이지에 대해 인증을 확인하기 위해 다음 미들웨어를 실행합니다.

function isLoggedIn(req, res, next) { 
    if (req.isAuthenticated()) { 
     return next(); 
    } 
    res.redirect('/'); 
} 

여기 내 문제가 있습니다. 무기 토큰 또는req.isAuthenticated() = true 인 경우 내 API 호출에 액세스하도록 허용하고 싶습니다. 현재 isLoggedIn 미들웨어 또는 controllerClient.isBearerAuthenticated 미들웨어를 사용하려면 선택해야합니다. 나는 그것들을 성명 또는 어떤 것과 같이 결합하는 방법을 찾고있다.

여러 개의 미들웨어 기능을 가지고 있다고 생각 했으므로 isLoggedIn을 호출 한 다음 controllerClient.isBearerAuthenticated을 호출했습니다. 하지만 그것은 콜백 함수가 호출되어 둘 다 호출 될 수있는 문제가있는 것처럼 보입니다. 나는 또한 다음 미들웨어 기능을 건너 뛰어 다음 번에 갈 수있는 방법이 있는지 알아보기 위해 연구하고 있었지만 그 중 하나에 관해서는 아무것도 찾을 수 없었다.

는 내가 가장 좋은 건 참 controllerClient.isBearerAuthenticated IF req.isAuthenticated() = 건너 뛸 수있는 방법을 알아 내려고하는 것입니다 생각합니다. 이제는이 일을하는 더 좋은 방법이있을 수 있습니다. 그렇다면 그것을 듣고 싶습니다.

그러나 사용자가 req.isAuthenticated()또는controllerClient.isBearerAuthenticated를 통해 autheroized되어 있는지 확인하는 미들웨어를 사용하는 방법에 대한 어떤 제안

? 아니면 이것을 달성하는 가장 좋은 방법은 무엇입니까?

한 번 더 메모. 나는 전에 this 질문을했으며 passport.authenticate은 이미 인증 된 사용자가 아닌 인증을 처리하기위한 것임을 알아 냈습니다. 그렇지 않으면 여권 전략 배열로 passport.authenticate을 사용합니다. 그리고 connect-ensure-login을 사용하면 connect-sure-login 또는 controllerClient.isBearerAuthenticated을 사용하는 것과 동일한 문제가 발생합니다.

미리 감사드립니다.!

답변

0

나는 작동하고있는 것처럼 보이는 해결책을 찾아 낼 수있었습니다. 나중에 참조 할 수 있도록 비슷한 문제가있는 사람들을 위해 아래에 해결책을 게시 할 것입니다.

다음 코드로 기본적으로 하나의 미들웨어 기능을 작동시키는 것처럼 보입니다.

function isAuthenticated(req, res, next) { 
    //Checking to see if user is authenticated on the web 
    if (req.isAuthenticated()) { 
     return next(); 
    } 
    //If not checking to see if user is authenticated via Bearer and OAuth 
    else { 
     return controllerClient.isBearerAuthenticated.apply(this, arguments); 
    } 
} 

그래서 우리는 단지 req.isAuthenticated 사실 동일 있는지 확인합니다. 우리가 그냥 콜백 함수를 반환하는 경우 API 함수가 호출됩니다. 그렇지 않다면 다음 함수를 호출 할 controllerClient.isBearerAuthenticated을 확인합니다. 성공하면 자동으로 나타납니다. 그렇지 않은 경우 Unauthorized의 상태 코드는 401입니다.

정확히 Unauthorized 메시지를 변경하는 방법을 알아내는 것이 좋겠지 만, 그 길을 잘 살펴볼 것입니다.

관련 문제