Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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