Я пытаюсь использовать учебное пособие MongoDB Stitch для веб-приложения Todo.Я использую Node.JS v10.14.2 на станции Linux Ubuntu 18.04 Bionic Beaver.
Когда я пытаюсь войти в систему через Facebook, процесс входа в систему завершается неудачно, и Facebook жалуется, что URL-адрес перенаправления, созданный сервером Stitch, являетсяне внесен в белый список, и поэтому был отклонен при попытке войти в Facebook с помощью OAuth.URL генерируется во время этого блока кода, найденного в этом модуле узла:
node_modules/mongodb-stitch-browser-core/dist/cjs/core/auth/internal/StitchAuthImpl.js
Вот код, который генерирует URL, который запускает процесс входа в систему.Он вызывает сервер Stitch, и сервер Stitch генерирует правильный URL, чтобы попросить Facebook войти в систему пользователя.Обратите внимание, я изменил код, но только , чтобы показать значение, которое генерировал вызов getAuthProviderRedirectRoute () .Других изменений не было.
StitchAuthImpl.prototype.loginWithRedirect = function (credential) {
var _this = this;
var _a = this.prepareRedirect(credential), redirectUrl = _a.redirectUrl, state = _a.state;
this.requestClient.getBaseURL().then(function (baseUrl) {
// ROS: We want to see the URL being created - ESM.
let replaceUrl = baseUrl +
_this.browserAuthRoutes.getAuthProviderRedirectRoute(credential, redirectUrl, state, _this.deviceInfo);
_this.jsdomWindow.location.replace(replaceUrl);
});
};
Вот значение replaceUrl , которое показывает URL-адрес, созданный на этом начальном этапе процесса входа в Facebook:
replaceUrl = https://stitch.mongodb.com/api/client/v2.0/app/my_stitch_app/auth/providers/oauth2-facebook/login?redirect=http://localhost:8001/&state=<<redacted>>&device=<<redacted>>
Stitch генерирует этот URL для начала рукопожатия OAuth на Facebook.Как видно из кода, этот URL-адрес загружается в расположение браузера.Затем сервер стежков генерирует URL для следующего этапа рукопожатия OAuth.Я извлек аргумент запроса redirect_uri из URL-адреса, который он генерирует и передает элемент управления, как показано здесь:
redirect_uri%3Dhttps%253A%252F%252Fstitch.mongodb.com%252Fapi%252Fclient%252Fv2.0%252Fauth%252Fcallback
Я затем вручную декодировал URI перенаправления, потому что онвыглядел неправильноЕсли вы посмотрите на приведенный выше аргумент запроса redirect_uri , то увидите, что URI обратного вызова OAuth был дважды закодирован с помощью метода encodeUri () .Это приводит к тому, что сервер OAuth Facebook отклоняет URI обратного вызова, поскольку после декодирования он выглядит как URL-адрес, показанный рядом с меткой DECODED ONCE , показанной ниже.
Это приводит к сбою рукопожатия OAuth, поскольку он не совпадает с URL-адресом, который вы видите ниже и помечен меткой "DECODED AGAIN" .
Это значение - то, что я указал на странице «Настройки OAuth клиента OAuth» в Facebook в разделе «Действительные URI перенаправления OAuth» в соответствии с инструкциями из учебника MongoDB Stitch.Поскольку URL был дважды закодирован, URI перенаправления при однократном декодировании не соответствует значению «DECODED AGAIN», и процесс входа в систему завершается неудачно.Очевидно, что я мог бы добавить значение «DECODED ONCE» в список URL-адресов, занесенных в белый список, но это только помогло бы решить проблему, поскольку оно должно выглядеть как полностью декодированное значение в «DECODED AGAIN».
DECODED ONCE :
redirect_uri=https%3A%2F%2Fstitch.mongodb.com%2Fapi%2Fclient%2Fv2.0%2Fauth%2Fcallback
DECODED AGAIN :
redirect_uri=https://stitch.mongodb.com/api/client/v2.0/auth/callback
Повторим, когда Facebook просят войти в систему пользователя с URL-адресом, созданнымСтежок, показанный ниже, Facebook не проходит процесс с сообщением об ошибке, также показанным ниже:
https://www.facebook.com/login.php?skip_api_login=1&api_key=<<redacted>>&kid_directed_site=0&app_id=<<redacted>>%26redirect_uri%3Dhttps%253A%252F%252Fstitch.mongodb.com%252Fapi%252Fclient%252Fv2.0%252Fauth%252Fcallback
Ошибка Facebook :
URL Blocked
This redirect failed because the redirect URI is not whitelisted in the app’s Client OAuth Settings. Make sure Client and Web OAuth Login are on and add all your app domains as Valid OAuth Redirect URIs.
Я искал стежок MongoDBПанель управления, и я нигде не вижу, что я мог ввести что-то, что привело бы к тому, что URL-адрес обратного вызова передавался Stitch в Facebook для двойной кодировки.Может кто-нибудь сказать мне, что может вызвать это нежелательное поведение и как это исправить?