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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions