Skip to content

Автризация, переавторизация, проверка состояния #1

@kulikov

Description

@kulikov

Формат сообщения:

{ 
    type: 'subscribe', 
    routes: ['user.chat.live', 'my.custom.route.key'],
    auth: {
        authUrl: 'http://my-auth-server.ru/auth',
        cookie: 'userId=13sdf45; sesID=1345;'
    }
}

type: 'subscribe', будет передоваться всегда, по этому параметру можно отловить подобные сообщения

routes: [], содержит список топиков, на которые нужно подписать юзера

auth: содержит данные для авторизации.

  1. Если получаем auth и текущий юзер не авторизован — авторизовываем его
  2. Если получаем auth и текущей юзер авторизован — переавторизовываем его
  3. Если после переавторизации сменился эксченж — переподписываем все топики на новый ексченж
  4. Если текущий юзер не авторизован и мы не получили auth — ошибка!

Все подписки из секции routes всегда добавляем к текущим.
После каждой авторизации/переавторизации не забываем перезаписывать userId и account текущего пользоватея.
Храним где-то отдельно все routes-топики, на которые подписан юзер, в случае если после очередной переавторизации у пользователя сменится account — переподписываем все топики на новый эксченж

Раз в 5 минут (значение должно быть конфигурируемым) перезапрашиваем авторизацию по последнему известному нам authUrl и cookie.

authUrl на основе полученных cookie проверяет пользователя, и если все ок должен вернуть json вида:

{ "userId" : 10034, "account" : "megaplan" }

account определяет на какой exchange нужно подписываться для получения сообщений. название exchange'а формируется из префикса + название аккаунта. например "ecomet_megaplan"

Сообщения для публикации должны представлять из себя json формата:

{ "message" : "любые данные, которые будут доставлены в браузер подписчикам", 
  "allowedUsers" : [10034, 10023, 10005] }

allowedUsers — не обязательное поле. Может содержать список id'ов пользователей, которым предназначается это сообщение. Проверка прав происходит на уровне эрланга, и пользователи, которых нет в списке allowedUsers не получат данное сообщение. Если allowedUsers не указан — сообщение получат все на него подписавшиеся.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions