Как определить, когда произошел успешный вход в систему / аутентификация?

Я пытаюсь сделать следующее:

  1. Из моей учетной записи на www.sharelatex.com/xxxxxx, используйте скрипт пользователя greasemonkey (javascript), чтобы прикрепить кнопку, которая при нажатии вызывает API, который получает информацию из моей учетной записи www.mendeley.com. (хххххх в ссылке на sharelatex относится к конкретному документу, который я редактирую, что-то вроде ссылки на документ Google).

  2. Когда кнопка нажата, если она обнаруживает, что пользователь еще не аутентифицировал использование скрипта пользователя Greasemonkey на mendeley.com, она откроет второе окно вкладки браузера для аутентификации / входа в систему. Этот шаг выполняется путем вызова Mendeley. API и прохождение процесса OAuth2 для неявного предоставления.

  3. после успешного входа в систему / аутентификации пользователем окно входа автоматически закрывается Mendeley и открывается окно третьей вкладки браузера, назначение "redirect_uri", которое я указал и в вызове API, и в регистрации Mendeley этого пользовательского скрипта GreaseMonkey, URL этого окна содержит информацию о токене после хеша в конце URL-адреса.

  4. Пользовательский скрипт greasemonkey определяет, что вход в систему прошел успешно и что перенаправленное окно теперь видно, и считывает токен из URL на этой перенаправленной странице.

  5. Затем пользовательский скрипт использует токен для повторного вызова API Mendeley, на этот раз для загрузки файла из учетной записи Mendeley пользователя, который будет включен в документ Sharelatex, который разрабатывает пользователь.

  6. Пользовательский скрипт greasemonkey закрывает 3-е окно и возвращается в исходное окно, ожидая следующего нажатия кнопки, чтобы начать процесс заново.

У меня возникли проблемы с жирным шрифтом / курсивом на шаге 4. Я адаптировал код с http://www.gethugames.in/2012/04/authentication-and-authorization-for-google-apis-in-javascript-popup-window-tutorial.html (см. их шаг 3), который, кажется, специально предназначен для этой задачи. Эта ссылка ( Определение успешного входа в HTTPS) казалась актуальной, но не получила жизнеспособного ответа. Мой код представляет окно входа в систему, перенаправляет на указанный URL-адрес после успешного входа в систему / аутентификации пользователя, а затем, к сожалению, не предпринимает никаких дальнейших действий: это 3-е окно не закрывается, предупреждения, которые я вставил в код для проверки, не выполняются, Вот мой код:

// ==UserScript==
// @include     https://www.sharelatex.com/project/*
// @require     https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @require     https://code.jquery.com/jquery-migrate-3.0.1.js
// @require     https://apis.google.com/js/client.js?onload=handleClientLoad
// @match       https://www.mendeley.com/newsfeed/*
// additional stuff here not relevant to the question
// ==/UserScript==

var redirectUrl   = "https://www.mendeley.com/newsfeed/";
var path          = "https://api.mendeley.com/oauth/authorize?"; 
var urlAuth       = path+"?client_id=0000&redirect_uri="+redirectUrl+"&response_type=token&scope=all" //client_id not real value

/* ***************   USER BUTTON CREATION ************************* */
var input = document.createElement("input"); 
input.type = "button"; 
input.value="Update bibtex"; 
input.onclick = getBib; 
input.setAttribute("style", "font-size:18px; position:absolute; bottom:10px; left:10px;");
document.body.appendChild(input);

/* **************************************************************** */
function getBib() {    
// Note that I am leaving out tests accessing whether user has already 
// logged in/authorized, which would be code that would go here. 
   var win  =  window.open(urlAuth, "GM to API Auth Window", 
                        "resizeable, scrollbars, status", 
                        "toolbar, dependent, width=660, height=480");
// the above window will be the Mendeley log in/authorization window. 
   setInterval(function() {
   if (win.location.href.indexOf("access_token=") != -1) {
// the idea here is that if the word access_token= appears in the url, then 
// the user has successfully logged in, and Mendeley has closed the log in 
// window and opened a 3rd window that points to the redirect_uri 
// with the token and other needed info attached at the end as hash 
// fragment.  When this URL is detected, grab the needed info and close the
// window, so that the only window now open is the original (sharelatex) one.
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// HERE IS THE PROBLEM:  THE CODE NEVER EXECUTES THE BELOW LINES, EVEN 
// WHEN THE WINDOW IS CLEARLY REDIRECTED TO THE APPROPRIATE URL WITH TOKEN INFO 
// WHY ISN'T THE indexOf() BECOMING TRUE AT THAT POINT AND TRIGGERING BELOW CODE? 
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
       var url = win.location.href; 
       acToken   = gup(url, 'access_token');
       tokenType = gup(url, 'token_type');
       expiresIn = gup(url, 'expires_in');
       alert("Got the info!")
       win.close();           
       downloadBib(acToken);
     }
  }, 100); 
} 

function gup(url, param) { 
// returns extracted token number and other desired parameters from the url
} 

function downloadBib(token) { 
// uses the Mendeley API to download the most up-to-date bibtex file
}

Спасибо всем, кто может определить проблему с кодом и оказать мне столь необходимую помощь!

0 ответов

Другие вопросы по тегам