2017-09-14 9 views
0

나는 FeathersJS 데모 채팅 응용 프로그램의 일부인 메시지 서비스와 매우 유사 인증 뒤에 FeathersJS 서비스 짓고 있어요 : 또한 https://github.com/feathersjs/feathers-chat/깃털 인증을 사용하면 앱 내부 서비스 호출을 인증 받아야합니까 (그리고 어떻게 피하는가)?

을, 나는 메시지를 저장해야하는 이벤트 리스너를 정의하고 싶습니다 그것 앱의 메시지 서비스를 수신하고 필요한 모든 후크를 호출하여 클라이언트 애플리케이션에 알립니다.

여기에 내 현재의 접근 방식 :

module.exports = function() { 
    const app = this; 
    const Model = createModel(app); 
    const paginate = app.get('paginate'); 

    const options = { 
    name: 'messages', 
    Model, 
    paginate 
    }; 

    app.use('/messages', createService(options)); 

    const service = app.service('messages'); 
    service.hooks(hooks); 

    const sender = new MyExternalMessageSender(); 
    sender.on('message', (msg) => { 
    service.create(msg, {user: {_id: 0}}).then(result => console.log(result)); 
    }); 

    if (service.filter) { 
    service.filter(filters); 
    } 
}; 

이 때때로 잘 작동하고 MyExternalMessageSender에게 통지로 때로는 무작위로 곧 오류가 발생하고 메시지 서비스의 create 메소드를 호출하려고합니다.

NotAuthenticated: No auth token 
at Error.NotAuthenticated (projects\feathers-chat\node_modules\feathers-errors\lib\index.js:100:17) 
at projects\feathers-chat\node_modules\feathers-authentication\lib\hooks\authenticate.js:102:31 

어떻게하면 응용 프로그램 자체에서 JWT를 사용해야 메시지를 올바른 방법으로 저장할 수 있습니까?

지원해 주셔서 감사합니다.

답변

1

MyExternalMessageSender이 무엇인지 모르겠지만 입니다. 내부 서비스 호출에서는 기본적으로 건너 뜁니다. 내부 서비스 호출이면 params.provider이 설정됩니다. 따라서 외부 전화에서 hook.params을 전달하면 (이 일반적으로 rest 또는 socketio으로 설정 됨) 후속 서비스 호출 인증이 실행됩니다 (외부 호출이라고 생각되기 때문에).

원래 매개 변수를 전달하기 전에 provider 속성을 제거하면이 문제를 방지 할 수 있습니다. Lodash _.omit :

myservice.find(_.omit(params, 'provider')) 
+0

감사합니다. 덕분에 후크가 작동하는 방식에 대해 많은 통찰력을 얻을 수 있습니다. 비동기 EventListener로서'MyExternalMessageSender'를 생각하면 새로운 메시지가 생성되는 경우가 있습니다. 문제가 지속됩니다. 앱을 시작하면 모든 것이 제대로 작동하고 수신 메시지가 앱 수준에 저장되지 않고 위의 NotAuthenticated 오류가 표시되는 경우가 있습니다. 앱을 다시 시작하면 가끔 도움이되고 때때로 그렇지 않을 수도 있습니다. 어떤 아이디어가 오류에 어떻게 접근할까요? 인증을하지 않아도 해지 될 수있는 것은 무엇입니까? – YMMD