Приложение Heroku + приложение реакции: необработанный запрос на привязку тега
Я строю узел + экспресс-сервер, с созданием-реакции-приложения на внешний интерфейс. Я использовал passportjs для обработки маршрутов аутентификации, и все это полностью работало на локальном хосте (бэкэнд на порту 5000 и интерфейс на порте 3000 с прокси). При развертывании в Heroku сервер не может распознать мои маршруты аутентификации, и поэтому heroku предоставляет статический index.html. Если я тестирую свои API с помощью Postman, все, кажется, работает (я вижу html-страницу для google oauth), но с помощью тега привязки в моем приложении реакции или ручного написания конечной точки в URL-адресе я вижу только перезагрузку той же страницы.
Мой сервер index.js:
const express = require('express')
const passport = require('passport')
const mongoose = require('mongoose')
const path = require('path')
// KEYS
const keys = require('./config/keys')
// MONGOOSE MODELS
require('./models/User')
mongoose.connect(keys.mongoURI)
// PASSPORT SETUP
require('./config/passport')
// CREATE THE SERVER
const app = express()
// EXTERNAL MIDDLEWARES
require('./middlewares/external')(app)
// ROUTE HANDLERS
require('./routes/authRoutes')(app)
// PRODUCTION SETUP
if (process.env.NODE_ENV === 'production') {
// express serve up production assets ( main.js, main.css )
app.use(express.static('client/build'))
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
})
}
// START THE SERVER
const PORT = process.env.PORT || 5000
app.listen(PORT)
Поток:
LOCALHOST: приложение реакции запускается -> я нажимаю "Логин Google" -> ПОЛУЧИТЬ запрос к "/auth/google" -> Google oauth flow -> перенаправить на "/", и мое приложение реакции появляется снова, пользователь вошел в систему.
HEROKU: отреагируйте на приложение my-app.herokuapp.com/ -> нажмите "Логин Google" -> страница перезагрузится, ничего не происходит. пользователь не авторизован.
Пожалуйста, ребята, помогите мне. Спасибо
3 ответа
Это результат установки сервисного работника по умолчанию, чтобы сделать ваше приложение прогрессивным веб-приложением.
Чтобы определить, является ли это проблемой для вас, протестируйте ваше приложение Heroku Production Mode в режиме инкогнито. Запрос на / auth / google должен теперь дойти до сервера и вести себя так же, как при разработке.
Как только вы решите, что это проблема, вы можете удалить
import registerServiceWorker from "./registerServiceWorker";
из вашего файла /client/src/index.js.
Кэш браузера может уже содержать установленный сервисный работник, поэтому вам, возможно, придется
- очистить кеш браузера на пользователях браузеров
удалить сервер работника программно
import { unregister } from './registerServiceWorker'; .... unregister();
У меня были те же проблемы с точно такими же симптомами.
Для меня причиной стала опечатка в ключах: в server/config/prod.js
У меня было чтение строки cookieKey: process.env.COOKIE_KEY
но в Heroku Config Variables эта переменная была названа cookieKey
, Переименование его в COOKIE_KEY
внутри Героку решил проблему.
Если вы следовали учебнику Стивена Гридера, мне интересно одно: находится ли ваш файл passport.js в конфигурации или службах? Я вижу, вы написали в index.js: require('./config/passport')
тогда как мой в index.js есть require('./services/passport')
может не быть вашим решением проблемы зависания в процессе работы Google, но может помочь.