Показать сообщение отдельно
  #29 (permalink)  
Старый 25.03.2014, 22:23
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от Erolast
Я не пойму, почему ты просто не повесишь на запрос колбэк, который для авторизованых делает то, что нужно, а неавторизованным говорит "Извините, вы не авторизованы."?
Есть приложение - движок сайта. Есть в нем модуль управления статьями. Есть в нем функционал добавления статьи.
Пользователь пишет статью, в процессе его сеанс заканчивается и он становится неавторизованным юзером. Но он узнает об этом лишь когда его выкинет на страницу авторизации при попытке сохранить статью. Я написал на php функционал хранения данных, которые пользователь вводил, так что катастрофы не будет, если юзер там поэму настрочил - все восстановится. Но вот захотел я сделать так, чтобы авторизация проверялась перед отправкой формы и чтобы подтвердить авторизацию юзер мог тутже - без перебросов на другие страницы.

Ну общие черты понятны думаю... едем дальше.
У движка сайта есть общая javascript библиотека со всякими функциями и даже модулями. В свою очередь, у каждого модуля сайта (в данном случае у модуля управления статьями) тоже есть свой набор скриптов javascript.
У модуля управления статьями есть скриптик, который перехватывает форму добавления статьи и поверхностно ее проверяет перед отправкой на сервер. И тут я решил, что хорошо бы было, если бы перед отправкой формы была бы еще и проверка авторизации.
Я начал писать эту проверку в составе скрипта модуля статей. Но тут я подумал... а ведь потом я буду писать модуль управления комментариями, и там тоже не помешала бы фишка проверки авторизации перед отправкой комментария.
Че делать? Потом писать аналогичную проверку в модуле комментариев? Нет наверно, нахрена одно и тоже переписывать.
Поэтому я решил написать модуль проверки авторизации, который смогут использовать все - любой модуль сайта. Естественно этот модуль вошел в состав общей javascript библиотеки. У модуля есть два открытых метода isLogin() и isLogin.setup(). Один конфигурирует модуль, второй используется a функции перехвата действия пользователя.
То есть скрипт перехватил форму, проверил ее и он делает
return isLogin();
И все. Теперь модуль проверки авторизации решает, что вернуть - true или false. Так как модуль будет делать асинхронные ajax запросы, то он должен сразу что-то вернуть. В данном случае он отменяет действие пользователя и проверяет авторизацию. Не отменить я не могу, так как никто ждать не будет, пока вернется ответ сервера. Поэтому, в модуль авторизации передается объект, по которому кликнул пользователь. Если с объектом все ОК, то модуль просто возвращает false и начинает делать свою работу.
nerv_
Что не так с архитектурой? Есть другие способы? Синхронные запросы не предлагать.
Ответить с цитированием