Ошибка авторизации клиента Google OAuth на всех устройствах, кроме моей локальной машины разработки

#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. Большое спасибо за вашу помощь, я сделаю это прямо сейчас.