2012-05-06 4 views
7

내 메인 애플 리케이션은 장고 애플 리케이션이지만, 일부 실시간 물건에 대해서는 Node/Socket.IO를 사용하고 싶다. Redis를 사용하여 Django에서 Node로 (그리고 나서 다양한 클라이언트로) pub/sub를 수행합니다. 까다로운 부분은 Django auth에 대해 Node 사용자를 인증하는 방법입니다. 내 노드 응용 프로그램에서Django 인증을 사용하여 노드 응용 프로그램에서 사용자를 인증하려면 어떻게해야합니까?

, 내가 가진 :

io.on('connection', function (socket) { 
    const subscribe = redis.createClient(); 
    var userId = authenticateAndGetUserId(); 
    subscribe.subscribe(userId + ':feed-items'); 

    subscribe.on('message', function (channel, message) { 
    socket.emit('feed-items', JSON.parse(message)); 
    }); 

}); 

그래서 제 질문은 authenticateAndGetUserId을 구현하기위한 좋은 전략 무엇입니까? 세션은 MySQL에서 지원되므로 거기를 통과 할 수 있습니다. 그것에 대해 갈 수있는 더 좋은 방법이 있는지 궁금해.

답변

4

장고 쪽에서는 REST API를 노출합니다. 그런 다음 Node.js를에 당신은 당신이 필요로하는 정보와 일부 JSON을 반환합니다

http://yourdjangoserver.com/authenticate

에 POST 사용자 이름/암호처럼 뭔가를 할 수 있습니다. API를 공개적으로 조사하고 싶지 않은 경우 API를 비공개로 설정하거나 기본 인증과 같은 방식으로 보호하십시오.

restify는 Node.js 쪽에서 REST API로 작업하기가 매우 쉬운 npm 패키지입니다. 이 아키텍처에 대한 좋은 점은 느슨하게 결합 된 것입니다. 당신은 Django를 아무거나 대체 할 수 있었고 클라이언트는 결코 알 수 없었을 것입니다.

+2

. 내 장고 사용자 프로필 모델에서 임의로 생성 된 키를 사용하여 'API 키'필드를 만듭니다. 그런 다음 해당 키를 가져와 유효한 사용자에 속하는지 여부를 결정하는 간단한 HTTP 끝점/API를 가질 수 있습니다. – maroonmed

+0

node.js가 차단되지 않습니까? 그런 경우에 node.js를 어떻게 사용합니까? –

+0

Node.js를 차단하는 이유가 보이지 않습니다. – deltanovember

2

이미 redis 서버가 있으므로 로그인 한 모든 사용자에 대해 (username, sessionkey) 쌍을 저장할 수 있으며 선택적으로 세션 설정에 해당하는 TTL 값을 사용할 수 있습니다.

그런 다음 사용자가 채널 구독을 요청할 때마다 사용자 이름을 전송 한 다음 사용자 이름을 redis 데이터 저장소와 비교하여 확인합니다.

+1

나는 이것을 좋아합니다. – emostafa

관련 문제