У меня есть соединение WebSocket, которое я пытаюсь аутентифицировать в файле connection.rb следующим образом.
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
end
private
def find_verified_user
find_api_user || find_app_user || reject_unauthorized_connection
end
def find_api_user
token = request.params[:token]
User.find_by(token: token) if token
end
def find_app_user
(current_user = env['warden'].user) ? current_user : reject_unauthorized_connection
end
end
end
Но оно продолжает возвращать неавторизованных пользователей в производственном процессе, и старый токен отправляется на сервер. Интересным моментом является то, что он отлично работает, когда он только что развернут. Он развернут на Heroku. Я отправляю этот токен из внешнего интерфейса.
export const useChannel = (token, channelName, listeners) => {
useEffect(() => {
let mounted = true
const ActionCable = require('actioncable')
const socket = ActionCable.createConsumer(`${process.env.WS_URL}?token=${token}`)
socket.subscriptions.create(channelName, listeners)
mounted && socket.connect()
return () => {
mounted = false
socket.disconnect()
}
}, [])
}
Я также проверил токен, который отправляется на сервер, и он в порядке. Но бэкэнд продолжает получать старый токен. Заранее спасибо.