2016-10-01 139 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?