2013-05-23 2 views
4

У меня есть приложение для рубинов на рейках, развернутое в крутящий момент. Мне нужно каким-то образом защитить websockets в моем приложении. Я использую stomp websockets, есть ли способ аутентифицировать пользователей, пока они делают соединение с веб-соединением? Я мог бы использовать параметры имени пользователя и пароля, но в настоящее время они игнорируются. Есть ли другой способ аутентификации этого соединения? Благодаря!Аутентификация клиентов стоп-стоп-серверов

ответ

1

Вы можете аутентифицировать сообщение в Stomplet, используя сеанс и сохраненный токен. Для этого вам нужно настроить Rails для использования хранилища сеансов Torquebox. Это может быть сделано с помощью инициализатора, например config/initializers/torquebox_init.rb:

AppName::Application.config.session_store :torquebox_store 

Теперь Stomplet будет иметь доступ к сессии. Вот пример Stomplet, который использует параметр сеанса :authentication_token, чтобы соответствовать идентификатору пользователя_таблицы пользователя в базе данных. Маркер аутентификации проверяется на наличие подписки, отправив сообщение, и отпиской:

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

В основном маркер масштаба системы для меня техника его подводит, тем более, что я использую Завещание. Если вы хотите разместить свой веб-сайт в слове chrome extension, проще просто просто ввести имя пользователя/пароль для топания и управлять своими виртуальными сессиями подписчиков в стопплете. Это также позволяет вам делать некоторые забавные вещи, насколько вы нажимаете.

Смежные вопросы