Связь на стороне клиента Angular+RESTful с API для аутентификации/(ре)маршрутизации
Это было рассмотрено в нескольких разных вопросах и в нескольких разных учебниках, но все предыдущие ресурсы, с которыми я столкнулся, не совсем попали в точку.
Короче говоря, мне нужно
- Вход через POST с
http://client.foo
поhttp://api.foo/login
- Иметь состояние графического интерфейса/компонента «вошел в систему» для пользователя, который предоставляет маршрут
logout
- Иметь возможность «обновлять» UI, когда пользователь выходит/выходит из системы. Это было самым неприятным
- Защитите мои маршруты для проверки состояния аутентификации (если им это нужно) и соответствующим образом перенаправьте пользователя на страницу входа
Мои проблемы
- Каждый раз, когда я перехожу на другую страницу, мне нужно сделать вызов
api.foo/status
, чтобы определить, вошел ли пользователь в систему. (Я использую банкомат Express для маршрутов). Это вызывает сбой, поскольку Angular определяет такие вещи, какng-show="user.is_authenticated"
- Когда я успешно вхожу/выхожу из системы, мне нужно обновить страницу (я не хочу этого делать), чтобы заполнить такие вещи, как
{{user.first_name}}
, или, в случае выхода из системы, очистить это значение.
// Sample response from `/status` if successful
{
customer: {...},
is_authenticated: true,
authentication_timeout: 1376959033,
...
}
Что я пробовал
- http://witoldsz.github.io/angular-http-auth/1
- http://www.frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/2
- https://github.com/mgonto/restangular (на всю жизнь я не мог понять, как на
POST
сpost data
, а неquery params
Документы ничего не нашли по этому вопросу.
Почему я чувствую, что схожу с ума
- Кажется, что каждый учебник опирается на какое-то решение для базы данных (много Mongo, Couch, PHP + MySQL, до бесконечности), и ни одно из них не полагается исключительно на связь с RESTful API для сохранения состояний входа в систему. После входа в систему дополнительные POST/GET отправляются с
withCredentials:true
, так что это не проблема. - Я не могу найти ЛЮБЫЕ примеры/учебники/репозитории, которые используют Angular+REST+Auth, без внутреннего языка.
Я не слишком горжусь
По общему признанию, я новичок в Angular, и не удивлюсь, если подхожу к этому нелепо; Я был бы в восторге, если бы кто-нибудь предложил альтернативу, даже если это суп с орехами.
Я использую Express
в основном потому, что мне очень нравятся Jade
и Stylus
— я не женат на маршрутизации Express
и откажусь от нее, если то, что я хочу сделать, возможно только с маршрутизацией Angular.
Заранее благодарим за любую помощь, которую может оказать любой. И, пожалуйста, не просите меня гуглить, потому что у меня около 26 страниц фиолетовых ссылок. ;-)
1Это решение основано на макете Angular $httpBackend, и неясно, как заставить его общаться с реальным сервером.
2Это было ближе всего, но, поскольку у меня есть существующий API, с помощью которого мне нужно пройти аутентификацию, я не мог использовать 'localStrategy' паспорта, и мне казалось безумием писать OAUTH сервис... который только я собирался использовать.
$cookie
или$cookieStore
. Файл cookie (созданный сервером) возвращается и сохраняется в браузере, и когда я делаю другие вызовы REST, требующие аутентификации, я устанавливаюwithCredentials:true
в своих вызовах. Это отлично работает, поддерживает состояние входа в систему и защищает/скрывает маршруты до тех пор, пока этот пользователь не войдет в систему, с которой у меня возникли проблемы. - person couzzi   schedule 20.08.2013/login
,<form>
, который он заполняет, используетng-sumbit="login()"
. Консоль показывает, что POST прошел успешно, но никакие данные не заполняются до обновления, и когда я возвращаюсь к/login
, я не хочу, чтобы они видели форму, я хочу, чтобы они были перенаправлены на/profile
. - person couzzi   schedule 20.08.2013NodeJS
.AngularJS
берет на себя все остальные вызовы RESTful. Хотя изначально я хотел, чтобыAngularJS
поглотил все это, на самом деле я очень доволен своим текущим стеком: Node+Express+Jade+Angular. Прошло 5 месяцев (с момента написания этого вопроса), и у меня не было проблем. - person couzzi   schedule 23.01.2014withCrednetials
, а также для перехвата ответов об ошибках. (например, отправить пользователя обратно на страницу входа, если GET/POST/и т. д. возвращает 401) - person couzzi   schedule 24.01.2014