2016-10-01 3 views
1

Я пытаюсь выполнить уведомление с помощью кабеля действий в Rails 5.пользователя в Rails 5

После прочтения учебника для действий кабеля, которые работают на сессии & куков на основе проверки подлинности, чтобы получить уведомление о текущего зарегистрированного пользователя.

module ApplicationCable 
    class Connection < ActionCable::Connection::Base 
    identified_by :current_user 

    def connect 
    self.current_user = find_verified_user 
    logger.add_tags 'ActionCable', current_user.username 
    end 

    protected 

    def find_verified_user 
    if verified_user = env['warden'].session(:user) 
     verified_user 
    else 
     reject_unauthorized_connection 
    end 
    end 
end 

В find_verified_user я не могу получить объект пользователя из сеанса.

Может кто-нибудь мне помочь, чтобы аутентифицировать пользователя в действии.

+0

Не используйте сессию для ActionCable см этого ответа: https://stackoverflow.com/questions/32025897/authenticating-using-actioncable#answer -32207192 – murb

ответ

1

Если ваш session_store (config/initializers/session_store.rb) использует :cookie_store, то вы можете прочитать сессию зашифрованным печенье:

module ApplicationCable 
    class Connection < ActionCable::Connection::Base 
    identified_by :current_user 

    def connect 
     if user = User.find_by(id: session[:user_id]) 
     self.current_user = user 
     else 
     reject_unauthorized_connection 
     end 
    end 

    private 

     def session 
     key = Rails.application.config.session_options.fetch(:key) 
     cookies.encrypted[key]&.symbolize_keys || {} 
     end 
    end 
end 
0

Поскольку вы не доступ к сессии, вы должны использовать печенье:

1) Перейти в your_app/конфигурации/инициализаторы/session_store.rb и вставьте этот код:

Rails.application.config.session_store :cookie_store, key: 'your_super_secret_code' 

2) После того, как в любом месте вы можете получить U серы ID:

key = Rails.application.config.session_options.fetch(:key) 
cookies.encrypted[key]&.symbolize_keys || {} 

User.find(cookies["warden.user.user.key"][0][0]) 

Пример сессия: How can I find a devise user by it's session id?