Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
comet:chat-with-authorization [2018/02/24 18:57] anastation468 [Пример создания простейшего чата на php] |
comet:chat-with-authorization [2019/12/18 01:58] (текущий) |
||
---|---|---|---|
Строка 187: | Строка 187: | ||
===== Как сделать чат с авторизацией ===== | ===== Как сделать чат с авторизацией ===== | ||
- | В предыдущем примере скрипта мини чата каждый может представится любым именем, в большинстве случаев на практике это не так. По этому рассмотрим как сделать чат с авторизацией. Для этого придётся часть кода чата написать на php. | + | В предыдущем примере скрипта мини чата каждый может представится любым именем, в большинстве случаев на практике вам понадобятся функции администрирования для чата чтоб были возможности встроить блокировку пользователей нарушающих правила или отправляющих спам. По этому рассмотрим, как сделать чат с авторизацией. Для этого придётся часть кода чата написать на php. |
Здесь рабочее [[https://comet-server.ru/doc/example/5/|online демо чата с авторизацией]]. | Здесь рабочее [[https://comet-server.ru/doc/example/5/|online демо чата с авторизацией]]. | ||
Строка 195: | Строка 195: | ||
* В момент авторизации отправляется ключ авторизации в комет сервер и пользователю на страницу. | * В момент авторизации отправляется ключ авторизации в комет сервер и пользователю на страницу. | ||
* Пользователь соединяется с комет сервером по webSocets и передаёт ему свой ключ и id. | * Пользователь соединяется с комет сервером по webSocets и передаёт ему свой ключ и id. | ||
- | * Комет сервер сверяет полученные от пользователя данные с тем что прислал php и если всё верно то авторизация считается пройденной. | + | * Комет сервер сверяет полученные от пользователя данные с тем, что прислал php и, если всё верно, то авторизация считается пройденной. |
- | * После авторизации обмен ведётся как и в первом примере чата, но теперь к сообщениям от пользователя комет сервер добавляет id пользователя. | + | * После авторизации обмен ведётся, как и в первом примере чата, но теперь к сообщениям от пользователя комет сервер добавляет id пользователя. |
- | Всё. Таким образом пользователь не может подделать данные и выбрать чужое имя в чате так как для этого надо знать чужой пароль. | + | Всё. Таким образом, пользователь не может подделать данные и выбрать чужое имя в чате, так как для этого надо знать чужой пароль. |
=== Код примера чата на php === | === Код примера чата на php === | ||
Строка 205: | Строка 205: | ||
<?php | <?php | ||
- | // Список пользователей, вместо базы используется массив чтоб не усложнять пример | + | // Список пользователей, вместо базы используется массив, чтобы не усложнять пример |
$users = Array( | $users = Array( | ||
"victor"=> Array("pass" => "qwerty", "id" => 1, "name" => "Виктор"), | "victor"=> Array("pass" => "qwerty", "id" => 1, "name" => "Виктор"), | ||
Строка 260: | Строка 260: | ||
} | } | ||
| | ||
- | // Оповещаем всех что залогинился человек и теперь онлайн в чате | + | // Оповещаем всех, что залогинился человек и теперь онлайн в чате |
mysqli_query($comet, "INSERT INTO pipes_messages (name, event, message)VALUES('loginPipe', 'userLogin', '".mysqli_real_escape_string($comet,json_encode(Array( "name" => $users[$_GET["login"]]["name"])))."')"); | mysqli_query($comet, "INSERT INTO pipes_messages (name, event, message)VALUES('loginPipe', 'userLogin', '".mysqli_real_escape_string($comet,json_encode(Array( "name" => $users[$_GET["login"]]["name"])))."')"); | ||
| | ||
Строка 399: | Строка 399: | ||
Теперь рассмотрим код чата на php подробно: | Теперь рассмотрим код чата на php подробно: | ||
- | Для реализации авторизации в чате на php нам надо иметь базу пользователей, и какой то backend для работы с этой базой. Так как это учебный пример, и цель примера научить работе с комет сервером, то мы вместо хранения логинов и паролей пользователей чата в базе данных mysql зададим массив в котором жёстко пропишем имена и пароли для 5 тестовых пользователей php чата. | + | Для реализации авторизации в чате на php нам надо иметь базу пользователей, и какой-то backend для работы с этой базой. Так как это учебный пример, и цель примера научить работе с комет сервером, то мы вместо хранения логинов и паролей пользователей чата в базе данных mysql зададим массив в котором жёстко пропишем имена и пароли для 5 тестовых пользователей php чата. |
<code php> | <code php> | ||
Строка 436: | Строка 436: | ||
} | } | ||
</code> | </code> | ||
- | Когда человек нажимает на ссылку выхода из чата мы уничтожаем сессию и отправляем всем остальным участникам сообщение об этом. Здесь loginPipe это имя канала, а userExit это имя события в канале. Для удобства можно через один канал отправлять события с разными именами. | + | Когда человек нажимает на ссылку выхода из чата, мы уничтожаем сессию и отправляем всем остальным участникам сообщение об этом. Здесь loginPipe это имя канала, а userExit это имя события в канале. Для удобства можно через один канал отправлять события с разными именами. |
- | <note important>Следует обратить внимание что канал для уведомлений о попадании в чат называется loginPipe, то есть не содержит префикса "web_" а это означает что в него можно отправить сообщение только через CometQL при наличии секретного ключа разработчика.</note> | + | <note important>Следует обратить внимание что канал для уведомлений о попадании в чат называется loginPipe, то есть не содержит префикса "web_" а это означает, что в него можно отправить сообщение только через CometQL при наличии секретного ключа разработчика.</note> |
=== Авторизация пользователей в чате === | === Авторизация пользователей в чате === | ||
Строка 521: | Строка 521: | ||
===== Сохранение сообщений в бд ===== | ===== Сохранение сообщений в бд ===== | ||
- | Если вам надо сохранять сообщения в бд или дополнительно их фильтровать или как то дополнять данными. То вот есть ещё пример чата https://github.com/CppComet/php-chat-example похожий на примеры этой статьи но в нём отправка сообщений идёт не через вызов функции web_pipe_send, а через ajax запрос к php скрипту который уже направляет сообщение в комет сервер. Если использовать его то можно вставить свою произвольную обработку сообщений, в том числе и их сохранение в файле https://github.com/CppComet/php-chat-example/blob/master/chat.php | + | Если вам надо сохранять сообщения в бд или дополнительно их фильтровать или как-то дополнять данными. То вот есть ещё пример чата https://github.com/CppComet/php-chat-example похожий на примеры этой статьи, но в нём отправка сообщений идёт не через вызов функции web_pipe_send, а через ajax запрос к php скрипту, который уже направляет сообщение в комет сервер. Если использовать его, то можно вставить свою произвольную обработку сообщений, в том числе и их сохранение в файле https://github.com/CppComet/php-chat-example/blob/master/chat.php |