Я думаю, вы немного не понимаете, как работает oauth-авторизация. В основном, если вы хотите получить какие-либо данные, вам нужно сделать это ПОСЛЕ того, как вы воспользуетесь обратным вызовом и подтвердите пользователя в вашей системе.
Вы когда-нибудь видели, чтобы Google / github et c openid auth поставщик возвращал некоторые данные, которые соответствуют данным системы вызывающего абонента? Это невозможно.
Вы, вероятно, путаете это с webhook, когда вызывающая система вызывает webhook с некоторыми данными внутри себя, и вы фиксируете их. Который обычно используется в платежных транзакциях.
Но аутентификация немного отличается. Для аутентификации есть 3 системы.
- фактический поставщик аутентификации (Paypal / google / github) et c.
- провайдер идентификации , который в основном получает данные профиля и c, и кроме систем предприятия, эти две системы просто одинаковы.
- система вызова, которая является вашей NodeJS service в этом случае.
=> Теперь вызывающая система вызывает провайдера аутентификации для получения какого-либо кода, обычно кода авторизации. Это означает, что пользователь существует в системе аутентификации, скажем, Google.
=> Затем вызывающая система вызывает провайдера идентификации с этим кодом авторизации, проверяя, есть ли пользователь в провайдере идентификации (idp). ) и idp возвращает access_token, id_token, refresh_token и т. д. c (как я говорил в большинстве случаев, это одни и те же системы). Но рассмотрим Amazon, скажем, вы хотите войти в Amazon с помощью вашей Google учетной записи. У вас есть учетная запись Google , но у вас нет учетной записи amazon. Таким образом, вы получите код авторизации, но не получите id_token.
=> Теперь id_token большую часть времени содержит некоторую основную c информацию о пользователе в формате JWT. Но теперь ACCESS_TOKEN используется для выполнения всех других вызовов вашей системы (вызывающей системы). Теперь, как я сказал id_token, какие-то пользовательские данные. В вашей службе NodeJs может быть ИД пользователя для сопоставления таблиц БД с номером учетной записи.
=> Создайте конечную точку для получения номера учетной записи или чего-то, что принимает access_token и id_token. Сначала проверьте access_token и проверьте подпись id_token, затем расшифруйте токен, чтобы получить основную c информацию о пользователе. и используйте этот идентификатор для извлечения данных из вашей таблицы и использования этих данных.
После редактирования:
Вы можете увидеть в do c:
paypal.configure({
'openid_client_id': 'CLIENT_ID',
'openid_client_secret': 'CLIENT_SECRET',
'openid_redirect_uri': 'http://example.com' });
// Authorize url
paypal.openIdConnect.authorizeUrl({'scope': 'openid profile'});
// Get tokeninfo with Authorize code
paypal.openIdConnect.tokeninfo.create("Replace with authorize code", function(error, tokeninfo){
console.log(tokeninfo);
});
// Get userinfo with Access code
paypal.openIdConnect.userinfo.get("Replace with access_code", function(error, userinfo){
console.log(userinfo);
});
Когда вы получаете код авторизации, вы используете его для вызова paypal.openIdConnect.tokeninfo.create
и получения токенов. Затем используйте эти токены для вызова paypal.openIdConnect.userinfo.get
, чтобы получить информацию о пользователе. Теперь, когда вы получите информацию о пользователе, вы сможете создать строку базы данных, которую вы хотели создать.
Вы можете добавить эти два вызова ниже в ваш маршрут /callback
.