2016-10-01 137 views
1

我試圖使用Rails中的作用電纜來實現通知5.用戶會話驗證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_storeconfig/initializers/session_store.rb)使用:cookie_store,那麼你可以從加密的Cookie中讀取的會話:

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

因爲你沒有訪問會話,你必須使用的cookie:

1)圍棋to your_app/config/initializers/session_store.rb並粘貼以下代碼:

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

2)在任何地方你都可以得到你SER 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?