2013-12-25 3 views
2

Какой общий способ реализовать oauth2 auth в однострочном приложении на основе углов? Возможно ли реализовать его без перезагрузки страницы? Если нет - что является лучшим способом передачи данных auth обратно в угловой код со страницы?oauth2 auth on SPA на основе Angular.js + Node.js/PassportJS

ответ

1

сервер авторизации должен предоставить API для проверки подлинности пользователя и возвращает маркер доступа без перенаправления. В этом примере я буду использовать facebook в качестве сервера авторизации и сервера ресурсов для более легкого понимания. Поток выглядит следующим образом:

  1. Ваш пользователь нажмет нажатие кнопки.

  2. Поскольку это СПА, построенный с угловыми углами, браузер отправляет ajax на ваш сервер для получения данных.

  3. На стороне сервера, вы обнаружите, что это действие требует данных от сервера ресурсов (facebook), вместо перенаправления браузера к ресурсам сервера, как мы обычно делаем, сервер отправляет ответ с пользовательский статус (или любая информация, указывающая, что этому действию нужен токен доступа) в браузер.

  4. В браузере, когда вы получаете ответ от сервера в своей функции ajax . Вы можете проверить реакцию и выяснить , что это действие необходимо маркер доступа

  5. Браузер сначала пытается получить этот маркер доступа с сервера ресурсов (если пользователь уже вошел в систему). При работе с facebook с использованием FB javascript SDK мы обычно используем функцию FB.getLoginStatus.

    a. Если мы можем получить токен доступа в обратном вызове успеха (пользователь уже зарегистрирован ), просто отправьте этот токен доступа на сервер, чтобы получить данные (используя ajax).

    b. Если пользователь еще не вошел в систему, используйте javascript , чтобы предложить пользователю войти в систему, отринув кнопку входа в систему, и пользователь должен нажать на нее. При работе с facebook с помощью FB javascript SDK мы обычно используем функцию FB.login, когда пользователь нажимает кнопку входа. После успешного входа в систему мы получим токен доступа в успешном обратном вызове и просто отправьте его на сервер, чтобы получить ответ (используя ajax).

Там нет перезагрузки страницы, потому что все действия выполняются с помощью AJAX (без редиректа браузера)

+0

Спасибо большое за ответ. Не могли бы вы пояснить немного точки 3. Я не понимаю, как сделать это без перенаправления страниц. Поскольку нам нужно перенаправить на страницу facebook, чтобы иметь возможность использовать наши данные для приложения. –

+0

@silent_coder: в пункте 3 ваш сервер должен вернуть нормальный ответ, как и любые другие запросы ajax на ваш сервер (но с информацией, чтобы указать, что этому действию нужен токен доступа). На стороне клиента вы получаете этот ответ в своей функции обратного вызова ajax (на шаге 4) и создаете последующие запросы ajax для facebook. –

+0

Я думаю, вы не понимаете этого процесса.Когда вы используете какой-либо профайлер aAuth2, например facebook, когда вы отправляете первоначальный запрос в facebook на разрешение на запрос, ваше приложение перенаправляется на страницу facebook, где вы можете разрешить или запретить использование некоторых связанных с учетной записью данных, а затем facebook перенаправляет вас на страницу обратного вызова , Это общий рабочий процесс oAuth2. Поэтому я не понимаю, как сделать это с помощью ajax, и ваш ответ не описывает его. –

Смежные вопросы