Как я могу сделать OAuth-запрос, открыв новое окно, вместо перенаправления пользователя с текущей страницы? - PullRequest
31 голосов
/ 30 сентября 2011

Я сделал аутентификацию OAuth через Twitter и Facebook.В настоящее время на каждом из этих сайтов мой сервер перенаправляет пользователя на указанный URL-адрес (например, http://api.twitter.com/oauth/authorize с помощью Twitter), а затем получает параметры аутентификации по URL-адресу обратного вызова.

Но, таким образом,пользователи перенаправляются с моей страницы (на Facebook или Twitter) и возвращаются только после ввода правильного имени пользователя и пароля.Это похоже на то, как http://techcrunch.com делает это, когда пользователь пытается чирикать пост.

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

Это может быть очень простой задачей с JavaScript, но я все еще не могу понять это.Я могу открыть аутентификационный URL во всплывающем окне, но как получить результат и обновить главную страницу?

1 Ответ

52 голосов
/ 30 сентября 2011

Если вы открываете URL-адрес аутентификации во всплывающем окне, используя window.open(), вы можете получить доступ к родительскому окну с помощью:

window.opener

и перезагрузить родительское окно (извсплывающее окно) используйте:

window.opener.location.reload();

Этот код должен обслуживаться по URL-адресу, который вы задали в качестве URL-адреса успешного обратного вызова авторизации oauth.

В общем случае поток должен быть:

  • открыть всплывающее окно со страницей авторизации (например, на twitter.com)
  • после успешной авторизации твиттер перенаправляет пользователя на указанный вами URL (он открывается вто же самое всплывающее окно)
  • окно перезагрузки перезагружается (через window.opener.location.reload())
  • закрывать само всплывающее окно (с помощью JavaScript, если хотите)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...