Одностраничное приложение с регистрационными и поисковыми роботами

#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 могут легко решить вашу проблему.