FYI, если вы devise
уже установлена в вашем приложении, то вы можете использовать переменную окружения, установленную warden
найти authenticated user
. Для каждого аутентифицированного пользовательского наблюдателя хранится пользовательский объект в среде var. Каждый запрос аутентифицируется посредством промежуточного программного обеспечения warden
.
Примечание: env отличается от ENV
.
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user_from_env
end
private
def find_verified_user_from_env
# extracting `user` from environment var
current_user = env['warden'].user
if current_user
current_user
else
reject_unauthorized_connection
end
end
end
end
Если вы не использовали devise
то здесь другое решение. Предпосылкой является то, что вам нужно будет установить подписанный файл cookie с именем user_id
в вашем sessions_controller
или что-то в этом роде. например
cookies.signed[:user_id] = current_user.id
и для связи:
# app/channels/application_cable/connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user_from_cookies
end
private
def find_verified_user_from_cookies
current_user = User.find_by_id(cookies.signed[:user_id])
if current_user
current_user
else
reject_unauthorized_connection
end
end
end
end
Логин должно быть сделано с помощью обычного Rails путь, вы можете проверить проверка подлинности пользователя ли, как описано здесь: https://github.com/rails/ actioncable –
Я знаю, что могу это сделать, но мне нужен весь сайт, работающий через websockets. Могу ли я это реализовать? – asiniy