Как работать с состоянием аутентификации в приложении SproutCore

В (теперь как бы удаленном) вопросе Peter Kniestedt ему было интересно, где и как установить таймер для проверки для аутентификации пользователя.

Его вопрос является частью более крупного вопроса (который является названием этого вопроса). Поскольку я считаю важным получить ответ на этот вопрос, я создал новый вопрос, чтобы собрать всю важную информацию в одном месте.


person mauritslamers    schedule 12.05.2015    source источник


Ответы (1)


Это типичный случай использования диаграммы состояний, а точнее параллельных состояний.

Если вы еще не знали, SproutCore содержит очень полезную библиотеку под названием SC.Statechart, которая представляет собой способ работы с состоянием приложения гораздо более контролируемым способом, чем использование логических свойств, поскольку он также действует как респондент, а также контроллер.

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

MyApp.statechart = SC.Statechart.create({
  rootState: SC.State.design({
    substatesAreConcurrent: true,
    AUTH: SC.State.design({
      initialSubstate: 'CHECKAUTH',
      CHECKAUTH: SC.State.design({
      }),
      LOGIN: SC.State.design({
      }),
      AUTHENTICATING: SC.State.design({
      }),
      AUTHENTICATED: SC.State.design({
      }),      
    }),
    APPMAIN: SC.State.design({
    })
  })
});

Как это должно работать: когда ваше приложение запускается, оно сразу переходит в два состояния, одно из которых является состоянием APPMAIN, которое относится к самому приложению. Другое — это состояние AUTH, которое немедленно переходит в начальное подсостояние CHECKAUTH, которое проверяет, есть ли у пользователя действительный сеанс. Если нет, это состояние должно перейти в состояние LOGIN, которое отвечает за отображение экрана входа в систему. Когда пользователь затем выполняет вход в систему, состояние LOGIN переходит в состояние AUTHENTICATING, которое выполняет проверку сервера. Если эта попытка недействительна или неверна, состояние AUTHENTICATING должно перейти в LOGIN, в противном случае — в AUTHENTICATED.

Чтобы ответить на исходный вопрос, этот вопрос основан на следующем: если вам нужен где-то таймер, который регулярно проверяет, действительна ли аутентификация, он должен находиться в состоянии AUTHENTICATED. Если это не удастся, вы можете немедленно перейти в состояние LOGIN, чтобы отобразить экран входа в систему.

Подобная диаграмма состояний не позволяет пользователю перезагружать или выходить из приложения, чтобы снова войти в систему, и, возможно, в результате потерять данные. Короче говоря, это значительно улучшает пользовательский опыт.

person mauritslamers    schedule 12.05.2015