#node.js #heroku #oauth-2.0 #passport.js
#node.js #heroku #oauth-2.0 #passport.js
Вопрос:
Я разрабатываю полный стек Node.js веб-приложение (на основе стека MERN), которое имеет систему входа в систему Google OAuth. Я успешно развернул приложение на Heroku, и оно отлично работает на моем ноутбуке с Windows для разработки. Успешно появляется окно выбора учетной записи Google, я выбираю учетную запись и перенаправляюсь обратно на панель мониторинга (еще не завершена, но она успешно регистрирует пользователя, и все данные также успешно обновляются в MongoDB. Я даже проверял в разных браузерах и пробовал режим инкогнито, поток OAuth работает правильно, как и должно быть, но проблема в том, что я попытался открыть веб-сайт на своем мобильном устройстве и, нажав кнопку входа в Google (я добавлю ссылку на приложение внизу), выдает ошибку авторизации, ошибка 400: redirect_uri_mismatch. Теперь я знаю, что мой uri перенаправления должен быть обновлен на панели управления консоли разработчика, но я трижды проверил, что это то, что сказал мне мой инструктор, иначе почему бы это работало и на моем локальном компьютере?? Я определенно что-то упускаю из виду, что сбой OAuth на всех устройствах, кроме моего ноутбука. Любая помощь будет очень признательна.
Ссылка на приложение: https://dry-springs-04824.herokuapp.com
Passport.js файл:
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const mongoose = require('mongoose');
const keys = require('../config/keys');
const User = mongoose.model('users');
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
done(null, user);
});
});
passport.use(new GoogleStrategy({
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
callbackURL: '/auth/google/callback',
proxy: true
}, async (accessToken, refreshToken, profile, done) => {
const existingUser = await User.findOne({ googleId: profile.id });
if(existingUser) {
done(null, existingUser);
} else {
const user = await new User({ googleId: profile.id }).save()
done(null, user);
}
})
);
Я все еще очень смущен, почему он работает на моем локальном компьютере, если он должен выйти из строя, он не должен нигде работать правильно?
PS Я не тестирую веб-сайт в режиме разработки, все выполняется из производственного приложения, размещенного на Heroku, с учетом проблемы несоответствия uri перенаправления.
Еще раз спасибо за любую помощь.
Комментарии:
1. Кажется, у меня все работает нормально, вы пробовали использовать другую сеть, чтобы попробовать?
2. Большое спасибо за ответ. Я только что узнал, что всякий раз, когда я просто набираю URL-адрес в строке поиска, он автоматически использует «http» вместо «https». Если я вручную введу полный маршрут https: //, OAuth, очевидно, работает нормально. Теперь, как мне заставить его использовать https всякий раз, когда кто-либо из моих друзей просто вводит URL-адрес в строке?? Любая помощь будет действительно оценена.
3. Вы можете свой сайт перенаправить на https с помощью javascript
var loc = window.location.href ''; if (loc.indexOf('http://')==0){ window.location.href = loc.replace('http://','https://'); }
Вы также можете принудительно перенаправить его, используя .htaccess, или, в качестве альтернативы, использовать какой-нибудь сервис, такой как cloudflare, и установить правила страницы тоже будет работать.4. Большое спасибо за вашу помощь, я сделаю это прямо сейчас.