За последние 24 часа нас посетили 53735 программистов и 1725 роботов. Сейчас ищут 798 программистов ...

Сокеты, сессии, аутентификация и авторизация)

Тема в разделе "PHP для новичков", создана пользователем Алекс8, 28 сен 2018.

  1. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    Привет всем)) я тут опять вернулся к вопросу чата)) в качестве веб-сервера использую Workerman\Worker, но смысл мне кажется не поменяется если даже буду использовать Центрифугу или еще что то там..

    Смысл в чем.. мне надо идентифицировать пользователя и в зависимости от того кто он - выдавать ему нужны права в чате.
    Правильная ли моя логика в этом направлени
    1. При входе в чат запрашивает имя пользователя (в случае гостевого доступа) и это имя отправляется на сервер. (для админа и модераторов будет отдельная страница в хода с логином и паролем)
    2. Я на сервере в табличку БД заношу пару "имя пользователя" и его сессию.
    3. Дальше клиента редиректит на страницу чата и там уже создается сокет.
    4. При отправке сообщения через сокет я добавляю имя пользователя и его ID сессии взятый из кук..
    5. Сокет сервер проверяет эту пару (имя и сессию) по базе и если все нормально то выполняет то что от него хотят..

    Для того что бы сервер мог не только в чат что то посылать а еще что то и делать я просто создаю ключи в объекте отсылаемом с клиента.
    Код (Text):
    1. 'public' => [
    2. 'phpsessid' => 'sdf6s9d87g6sd89f7gs',
    3. 'from'=> 'Alex',
    4. 'msg' => 'Hi all!'
    5. ],
    или если это приватное сообщение тогда
    Код (Text):
    1. 'private' => [
    2. 'phpsessid' => 'sdf6s9d87g6sd89f7gs',
    3. 'from'=> 'Alex',
    4. 'to'=> 'Bob'
    5. 'msg' => 'Hi, Bob!'
    6. ],
    правильно я делаю?))
     
  2. SeApps

    SeApps Новичок

    С нами с:
    3 апр 2018
    Сообщения:
    27
    Симпатии:
    1
    Мне кажется, лучше будет при авторизации выдавать только id(сессии), при нужде юзать её для обращения к базе(узнвать имя), и в базе сделать три таблицы:
    1. Роли
    2. Разрешения
    3. Что роли могут делать(Many to many)
    А с приватным сообщением, просто у того, кто может это делать
    PHP:
    1. SELECT user_id FROM sessions WHERE id = 'id'
    2. SELECT * FROM roles_privilegies WHERE user_id = 'id'
    появляется переключатель между обычным и приватным.

    Я может быть неправильно понял вопрос?)
     
    Алекс8 нравится это.
  3. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    привет)
    у меня получается в системе два вида аунтентификации))
    1. Системные пользователи - те которые имеют доступ к системе)) админы, модераторы... что бы авторизироваться надо ввести логин и пароль.
    2. Чатовые пользователи - когда они переходят по ссылке на чат им надо ввести имя и нажать вход (без парольный доступ).

    мы сейчас говорим о чатовых пользователях..
    когда он вводит логин и нажимает ВХОД создается в БД запись с его ид сессии, ИД чата, именем...
    при его любом сообщении мы отсылаем на сервер эти три параметра и добавляем еще тело сообщения...
    таким образом я индентифицирую пользователя))