Итак, у меня есть приложение Backbone + домашняя страница. Прямо сейчас, если вы входите на мой сайт, я создаю глобальный объект с вашими данными о пользователе из базы данных. Однако вы можете просто нажать один из маршрутов в приложении напрямую.
Как обращаться с пользователями, которые не «вошли в систему», и перенаправить их на страницу «вы должны войти»?
Это стандартная операция? В принципе, у меня есть настройка URL REST, которая возвращает только
{ sessionId: [php-session-id-here] }
Если они войдут в систему, он вернет нечто подобное:
{ sessionId: [php-sess-id], userId: [user-id-from-db], firstName: [f-name], lastName: [l-name] }
Идеи? Благодаря!
То, что я делал в прошлом, – это включить на каждую страницу вместе с jQuery (фактически, добавленный в файл jQuery) расширение для метода AJAX для проверки того, какой пользовательский код отправляется, когда пользователь не вошел в систему. Когда это значение было замечено, оно перенаправляло пользователя на страницу входа, независимо от того, что происходит.
Это связано с тем, что на этом сайте было время при входе в систему, поэтому пользователь мог выйти из системы, сидя на странице, а затем запрос AJAX просто потерпел неудачу. Если у вас нет тайм-аута при входе в систему, вероятность когда-либо увидеть эту проблему тонкая. Просто игнорируйте запросы, которые поступают от пользователей, которые не вошли в систему.
Если вам нужна помощь в кодировании, начните здесь: Расширение Ajax: Prefilters, Converters и Transports .
На самом деле не должно требовать ничего сложного, как псевдокод:
Если вы хотите, вы можете загрузить лайтбокс с формой входа и отправить его через AJAX на PHP, где может произойти повторный вход, если вы помните, что попытка AJAX оказалась неудачной, вы можете отправить ее снова после входа в систему. Тогда пользователю даже не нужно оставлять страницу для входа в систему.
Если вы используете jQuery, вы можете установить глобальную ajaxSetting
которая позволяет вам делать определенные вещи по определенным http-кодам. Некоторые страницы, которые я читаю, рекомендуют добавить в свой JSON поле url, чтобы указать, где войти, но я полагаю, что это зависит только от вас. Итак, единственные изменения, которые вам нужно реализовать, я упомянул: 1. измените http-код на что-то разумное, как 401 (неавторизованное), и реализуйте обработчик http-кода. Но я бы не назвал этот стандарт, я бы просто сказал, что это сделали несколько человек (включая меня).
<?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'); }
if(isLogged()){ header('Location: http://google.com'); }