Как я могу запретить пользователям доступ к частям моего приложения Backbone, если они не вошли в систему? - PullRequest
3 голосов
/ 02 апреля 2012

Итак, у меня есть приложение Backbone + веб-страница. Прямо сейчас, если вы войдете на мой сайт, я создам глобальный объект с вашими данными пользователя из базы данных. Тем не менее, вы все равно можете просто перейти по одному из маршрутов в приложении напрямую.

Как мне обращаться с пользователями, которые не "вошли в систему", и перенаправлять их на "страницу входа в систему"?

Это стандартная операция? По сути, у меня есть REST-настройка URL, которая возвращает только

{ sessionId: [php-session-id-here] }

Если они войдут в систему, будет возвращено что-то вроде этого:

{
  sessionId: [php-sess-id],
  userId: [user-id-from-db],
  firstName: [f-name],
  lastName: [l-name]
}

Идеи? Спасибо!

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

То, что я делал в прошлом, - это включил на каждую страницу вместе с jQuery (фактически, добавленным в файл jQuery) расширение метода AJAX, чтобы проверять пользовательский код, который я отправляю, когда пользователь невошел в систему. Когда это значение было замечено, оно перенаправило пользователя на страницу входа независимо от того, что происходило.

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

Если вам нужна помощь в кодировании этого, начните здесь: Расширение Ajax: префильтры, конвертеры и транспорты .


На самом деле не нужно ничего сложного, например псевдокода:

  1. JS необходимо выполнить AJAX, поэтому JS обращается к серверу
  2. PHP проверяет вход в систему, еслиНужен
  3. Если вы не вошли в систему, отправьте обратно сообщение об отмене (я использовал конвертер для перехвата dataType «notLoggedIn». Однако это также может быть сделано с транспортом, они просто более сложные.)
  4. JS видит сообщение об отмене и выполняет перенаправление window.location, а не возвращает сообщение AJAX.

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

0 голосов
/ 02 апреля 2012
<?php 
function IsLoggedIn()
{
    if(isset($_SESSION['id'])) // Change that to what you want
{
    return 1;
}
    else
{ 
    return 0; 
} 
}
?>

Тогда в вашем коде вы можете использовать что-то вроде: if(isLogged()){ header('Location: http://google.com'); }

0 голосов
/ 02 апреля 2012

Если вы используете jQuery, вы можете установить глобальный ajaxSetting, который позволяет вам делать определенные вещи с определенными http-кодами.Некоторые страницы, которые я читаю, рекомендуют добавить в ваш JSON поле url, чтобы указать, куда входить, но я думаю, это зависит только от вас.Таким образом, единственные изменения, которые вам понадобятся для реализации того, что я упомянул, это: 1. изменить код http на что-то разумное, например 401 (неавторизованный), и реализовать обработчик кода http.Но я бы не назвал этот стандарт, я бы просто сказал, что это сделали несколько человек (включая меня).

...