Skip to content

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

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 не указан — сообщение получат все на него подписавшиеся.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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