#javascript #jquery #ajax #backbone.js #singlepage
#javascript #jquery #ajax #backbone.js #одностраничный
Вопрос:
Недавно, работая с одностраничным приложением Javascript, я столкнулся с проблемой. Вся идея этого проекта заключается в том, чтобы избежать перезагрузки страницы. Когда пользователь заходит в мое приложение, ему не нужно будет выполнять никаких перезагрузок. Это делается с помощью jQuery и Backbone.js и PHP как сервис.
У меня есть этот статический index.html файл, в котором я прячу свой контейнер для входа и контейнер приложения. Затем я показываю контейнер для входа, если пользователь не распознан моим приложением, и если у него есть авторизация, я показываю приложение.
if auth:
application.show()
elif not auth:
login.show() // like Gmail or Facebook etc.: Information login-form
Я не хочу показывать пользователям, которые не прошли проверку подлинности, как форму входа, так и общую информацию. Очень важно также, что сайт может быть найден роботами, такими как Google и т.д.
Можно ли это сделать только с двумя разными файлами, что даст мне перезагрузку? A site.com и login.site.com . Это решение меня раздражает, потому что мой логин, как сейчас, происходит довольно мгновенно.
Комментарии:
1. Используете ли вы Backbone. Контроллер? Почему вы не можете перенаправить
#login
на свою страницу входа? Я делаю одностраничное приложение со страницей входа, отображаемой на стороне клиента. После входа пользователя в систему я меняюwindow.location.hash
маршрут на другую страницу.
Ответ №1:
Не уверен, что я полностью понял вопрос, но если вы хотите проверить, прошел ли пользователь аутентификацию, попробуйте выполнить ajax-вызов. Если сбой с «401 unauthorized», пользователю необходимо войти в систему…
Комментарии:
1. @Julien это не моя проблема. Сейчас все это действительно работает хорошо. Моя проблема в том, что мне нужна эта целевая страница, где могут быть как форма входа, так и информация. Точно так же, как это делает Gmail, с общей информацией плюс поле входа..
2. Мой вопрос таков: возможно ли создать одностраничное приложение javascript, в котором у меня есть аутентификация. И в то же время заставьте Google Searchbot искать мой общедоступный сайт, то есть сайт, на который люди еще не вошли. Gmail делает это, но они перенаправляют после вашей аутентификации. Мой вопрос заключается в том, чтобы выполнить аутентификацию без перезагрузки и по-прежнему поддерживать эту целевую страницу, по которой Google может сканировать. Не знаю, было ли это более точным?
3. Ах. Для ботов вам необходимо иметь свою общедоступную страницу непосредственно в формате HTML (предпочтительный способ обработки основного просмотра в любом случае). Затем ваш контроллер при авторизации заменит DOM на пользовательский HTML.
4. Спасибо, Жюльен, но не приведет ли это к некоторому разрыву между loginform и специфичным для пользователя html, когда пользователь обновит (вручную) и войдет в систему? Затем загружается html (loginform), а затем я удаляю его и заменяю на пользовательский html — который больше всего беспокоит?
5. Скорее всего, да. Вот почему Google, Apple и большинство пользователей, создающих одностраничное приложение, вводят логин перед загрузкой самого приложения. Обновление страницы происходит, но оно полностью разделено между приложением и веб-страницей.
Ответ №2:
Вы можете достичь желаемого, используя вызовы ajax для аутентификации (хотя это не рекомендуемый подход, и люди обычно предпочитают описанное вами двухстраничное решение).
Что вы можете сделать, так это иметь очень тонкие контроллеры, которые существуют только для предоставления данных в пользовательский интерфейс rich client. Ваш контроллер шлюза (отдельный контроллер, без модели, которая действует как точка входа в приложение) просто отобразит базовую структуру приложения клиенту (без каких-либо пользовательских данных, вы не знаете, вошел ли пользователь в систему, вам не нужно знать на данном этапе). Затем клиент запрашивает у UserController идентификатор текущего вошедшего в систему пользователя, если пользователь вошел в систему, сервер возвращает ответ json, содержащий информацию, относящуюся к пользователю, а если нет, сервер возвращает ответ, в котором говорится, что пользователь не вошел в систему. Затем вы можете получить частичную форму для формы входа, а затем отправить ее снова через ajax. Как вы видите, однократное создание пользовательского интерфейса и связь с сервером с помощью облегченных вызовов ajax могут легко решить вашу проблему.