Наконец-то я нашел проблему, но не могу ее хорошо объяснить. Веб-сервер и сервер веб-сокетов работают на «127.0.0.1: xyz» каждый. Когда я захожу на свой веб-сайт с помощью «127.0.0.1:xy/app_dev.php/account», все работает, файлы cookie отправляются, читаются, а вошедший в систему пользователь возвращается clientManipulator.
Когда я захожу на свой веб-сайт с помощью «localhost:xy/app_dev.php/account», я всегда получаю обратно анонимного пользователя, и файлы cookie не отправляются. Может кто-нибудь объяснить мне это, пожалуйста, и будет ли это влиять на производственный режим? (например, пользователь также может подключиться к IP-адресу веб-сайта - и тогда это приведет меня к той же проблеме, не так ли?)
Этот вопрос связан с этим. (Симфония 2.7)
Я внедрил Gos Websocket Bundle и теперь могу отправлять сообщения в режиме реального времени на каналы, на которые пользователи могут подписаться. В настоящее время проблема заключается в том, что у меня нет доступа к текущему пользователю, вошедшему в систему, в моем классе темы уведомлений. Я уже пробовал все, что было подписано в соответствующем посте, на который я ссылался.
В настоящее время я добавляю «@security.token_storage» в свою тему, но, как я уже сказал, поведение такое же и для других подходов. Я думаю, что это проблема с файлами cookie/доменами, файлы cookie не отправляются на сервер веб-сокетов. Вот моя конфигурация:
Веб-сервер Symfony/php: «Сервер работает на http://127.0.0.1:8000"
Gos websocket config.yml:
gos_web_socket:
server:
port: 8081 #The port the socket server will listen on
host: 127.0.0.1 #The host ip to bind to
router:
resources:
- @MessageBundle/Resources/config/pubsub/routing.yml
client:
firewall: main
session_handler: @session.handler.pdo
pushers:
zmq:
host: 127.0.0.1
port: 5555
persistent: true
protocol: tcp
@session.handler.pdo в services.yml:
pdo:
class: PDO
arguments:
dsn: mysql:host=%database_host%;port=%database_port%;dbname=%database_name%
user: %database_user%
password: %database_password%
calls:
- [ setAttribute, [3, 2] ] # \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION
session.handler.pdo:
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
arguments: [@pdo, {lock_mode: 0}]
Сеанс Framework настроен на использование обработчика pdo:
session:
# handler_id set to null will use default session handler from php.ini
handler_id: session.handler.pdo
Часть JavaScript для подключения клиента к веб-сокету:
var webSocket = WS.connect("ws://127.0.0.1:8000");
webSocket.on("socket/connect", function(session){
session.subscribe("account/notification", function(uri, payload){
console.log("Received message", payload.msg);
});
});
Это моя конфигурация, хранилище токенов внедряется в службу для темы уведомлений. Метод «onSubscribe» темы срабатывает, но пользователь остается анонимным, даже если я вошел в систему:
public function onSubscribe(ConnectionInterface $connection, Topic $topic, WampRequest $request)
{
// always returns anonym
dump($this->tokenStorage->getToken()->getUser());die;
}
Что я упустил ?
С уважением.