2013-05-23 8 views
4

나는 Ruby 애플리케이션을 토크 박스에 전개했다. 내 응용 프로그램에서 웹 소켓을 보호 할 방법이 필요합니다. stomp websockets를 사용하고 있는데, websocket 연결을 만드는 동안 사용자를 인증하는 방법이 있습니까? 사용자 이름과 암호 매개 변수를 사용할 수는 있지만 현재 무시됩니다. 이 연결을 인증하는 다른 방법이 있습니까? 감사!스톰프 웹 소켓 클라이언트 인증

답변

1

세션과 저장된 토큰을 사용하여 Stomplet에 대한 메시지를 인증 할 수 있습니다. 이렇게하려면 Torquebox 세션 저장소를 사용하도록 Rails를 설정해야합니다. 이는 같은 config/initializers/torquebox_init.rb 등의 초기화와 함께 수행 할 수 있습니다

AppName::Application.config.session_store :torquebox_store 

이제 Stomplet 세션에 액세스 할 수 있습니다. 다음은 세션 매개 변수 :authentication_token을 사용하여 데이터베이스에서 사용자의 authentication_token과 일치시키는 예제 Stomplet입니다. [인증 토큰, 구독 메시지를 전송하고, 수신 거부를 판정한다
require 'torquebox-stomp' 

class StompletDemo 

    def initialize() 
    super 
    @subscribers = [] 
    end 

    def configure(stomplet_config) 
    end 

    def on_message(stomp_message, session) 
    token = session[:authentication_token] 

    if is_authenticated?(token) 
     @subscribers.each do |subscriber| 
     subscriber.send(stomp_message) 
     end 
    end 
    end 

    def on_subscribe(subscriber) 
    session = subscriber.session 
    if is_authenticated?(session[:authentication_token]) 
     @subscribers << subscriber 
    end 
    end 

    def on_unsubscribe(subscriber) 
    session = subscriber.session 
    if is_authenticated?(session[:authentication_token]) 
     @subscribers.delete(subscriber) 
    end 
    end 

    def is_authenticated?(token) 
    User.where(authentication_token: token).exists? 
    end 

end 

지금 당신이해야 할 모든 사용자가 인증되면, session[:authentication_token]이 설정되어 있는지 확인합니다. 대부분이이 컨트롤러에 설정 될 것 같은이 문제를 가진 다른 사람들을 위해

# user has successfully authenticates 
session[:authentication_token] = @user.authentication_token 
1

, 이것은 내가 그것을 해결하는 방법입니다.

https://gist.github.com/j-mcnally/6207839

은 기본적으로 나를 위해 토큰 시스템 didnt 한 규모, 나는 유증을 사용 특히 때문이다. 크롬 확장 프로그램에서 websocket을 호스팅하려면 사용자 이름/암호를 직접 전달하여 stomp에 전달하고 stomplet에서 자체 가상 가입자 세션을 관리하는 것이 더 쉽습니다. 이것은 또한 당신이 누를 곳까지 재미있는 일을 할 수있게 해줍니다.

관련 문제