2013-04-27 3 views
1

그래서 Node.js + Swagger + MongoDB를 사용하고 있습니다.Swagger + Node.js의 비동기 유효성 검사 기능

모든 요청에 ​​mongo의 사용자에 저장된 값인 유효한 auth_token이 있는지 확인하려고합니다. 내 문제는 Swagger에서 지원하는 유효성 검사기가 true 또는 false를 반환해야하지만 인증 토큰을 확인하기 위해 Mongo를 확인해야하므로 전체 유효성 검사가 비동기가됩니다. 여기

당신은 그것을 경우에 코드를 필요로한다 :

swagger.addValidator(
    function validate(req, path, httpMethod) { 
     var apiKey = req.headers["auth_token"]; 
     if (!apiKey) { 
     apiKey = url.parse(req.url,true).query["auth_token"]; 
     } 

     models.user.validateAuthToken(apiKey, function(err, valid) { 
     //Here is where I know if the auth token is valid and it checks against Mongo, so it's async 
     }); 

    return [something]; //this is what the validation sequence is expecting this function to do: return true or false 
}); 

가 어떻게이 문제를 해결할 수 있습니까?

답변

1

비동기 유효성 검사를 사용하려면 swagger로 티켓을 열고 싶을 수 있습니다.

+0

오, 내가 그랬어, 풀 요청을 제출 .. 그들이 그것을 받아들이기를 바랍니다. 아무도 그것을 필요로하는 경우, 나는 swagger를 갈래서 내 필요에 맞게 수정 한 모듈을 만들었습니다. swagger-node-express-ext – Deleteman

+0

@Deleteman :이 문제점에 대한 업데이트가 있습니까? 저장소를 보았지만 끌어 오기 요청을 찾지 못했으며 저장소가 오래되었습니다. 또한 Google 그룹에서이 토론을 발견했는데 찾을 수없는 풀 요청에 대해서도 이야기했습니다. https://groups.google.com/forum/#!topic/swagger-swaggersocket/UIgWkXYHBh0 – wegenerd

0

그리고 비동기 함수의 결과를 반환하지 않습니다?

swagger.addValidator(
    function validate(req, path, httpMethod) { 
     var apiKey = req.headers[ 'auth_token' ]; 
     if (!apiKey) { 
     apiKey = url.parse(req.url, true).query[ 'auth_token' ]; 
     } 

     return models.user.validateAuthToken(apiKey, function(err, valid) { 
     // check against mongo 
     return validation; 
     });  
}); 
+0

나는 그것을 줄 것이다.하지만 JS가 validateAuthToken 메서드가 addValidator에서 돌아 오기 위해 반환 될 때까지 기다릴 것 같지 않은데, 아마도 null을 반환 할 것이다. 그래도 고마워. – Deleteman

1

Swagger 1.2 또는 2.0을 사용하고 있습니까? 2.0 인 경우 swagger-tools을 사용하여 Swagger 설명서를 기반으로 요청에 대한 보안 처리기를 연결하기위한 미들웨어를 연결할 수 있습니다. Swagger Specification에 정의 된 모든 대충 보안 메커니즘을 지원합니다.

+0

이전 질문입니다. 아마도 1.2 버전을 사용했을 것입니다. 그러나 누군가 다른 사람이 같은 문제를 겪을 경우에 대비하여 여기에 업데이트 된 정보를 넣는 것이 좋습니다. – Deleteman