Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
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 |