Мы последовали вместе с одним из видео Стивена Гирдера о Udemy и хотели внедрить некоторый поток входа в FaceBook для моего собственного приложения.
Но я не могу получить доступ к маршрутам app.get в производственном режиме. Все отлично работает на localhost и разработке. Когда я захожу в / auth / facebook, я получаю только пустой экран.
Я использую реагирующий маршрутизатор-дом. Я пробую различные методы, такие как socket.io, но не могу заставить его работать :(
Файл index.js сервера
/* global __dirname process env */
const mongoose = require('mongoose');
const express = require('express');
const cookieSession = require('cookie-session');
const keys = require('./server/config/keys');
const bodyParser = require('body-parser');
const auth = require('./server/routes/auth');
const passport = require('passport');
const https = require('https');
const cors = require('cors')
const socketio = require('socket.io')
const authRouter = require('./server/lib/auth.router')
const passportInit = require('./server/lib/passport.init')
const { SESSION_SECRET, CLIENT_ORIGIN } = require('./config')
const fs = require('fs');
const pug = require('pug');
const path = require('path');
const gulp = require('gulp');
let server;
mongoose
.connect(keys.mongoURI)
.then(() => console.log('connection successful'))
.catch(err => console.log(err));
require('./server/models/SimpleTask');
require('./server/models/simpleLongTask');
require('./server/models/DailyJournals');
require('./server/models/Tracks');
require('./server/models/Hats');
require('./server/models/DailyTaskList');
require('./server/models/RepeatTask');
require('./server/models/RedueTask');
require('./server/models/TrackTree');
// used for development purposes.
const morgan = require('morgan');
const options = {
key: fs.readFileSync('./server/keys/server.key'),
cert: fs.readFileSync('./server/keys/server.crt'),
};
const app = express();
const PORT = process.env.PORT || 5000;
// If we are in production we are already running in https
if (process.env.NODE_ENV === 'production') {
server = http.createServer(app)
}
// We are not in production so load up our certificates to be able to
// run the server in https mode locally
else {
const certOptions = {
key: fs.readFileSync('./server/keys/server.key'),
cert: fs.readFileSync('./server/keys/server.crt')
}
server = https.createServer(certOptions, app)
}
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(
cookieSession({
maxAge: 30 * 24 * 60 * 60 * 1000,
keys: 'dashgkjlahgfkljashfkjasdflkhasdfjklh'
})
);
app.use(cors({
origin: CLIENT_ORIGIN
}))
const io = socketio(server)
app.set('io', io)
// app.use(localJWT.initialize());
require('./server/routes/book')(app);
require('./server/routes/auth')(app, passport);
require('./server/routes/loginRoutes')(app, passport);
require('./server/routes/tasksRoutes')(app);
require('./server/routes/calendarRoutes')(app);
require('./server/routes/trackRoutes')(app);
// require('./server/routes/frontEnd')(app);
if (process.env.NODE_ENV === 'production') {
// Express will serve up production assets.
// Like our main.js file, or main.css file
app.use(express.static('client/build'));
// Express will serve up the index.html file if it doesn't know the route....
const path = require('path');
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
}
//
// // reload code
// app.use(express.static('./dist/', {
// extensions: ['html', 'htm']
// }));
app.get('/wake-up', (req, res) => res.send('?'))
server.listen(process.env.PORT || 5000, () => {
console.log('listening...')
})
Вход в систему.
const mongoose = require('mongoose');
const passport = require('passport');
const express = require('express');
const User = require('../models/User');
const jwt = require('jsonwebtoken');
const settings = require('../config/settings');
require('../services/facebookPassport')(passport);
module.exports = (app, passport) => {
// send to facebook to do the authentication
app.get(
'/auth/facebook',
passport.authenticate('facebook', { scope: 'email' })
);
app.get(
'/auth/facebook/callback',
passport.authenticate('facebook', {
session: false
}), (req, res) => {
const token = jwt.sign(req.user.toJSON(), settings.secret);
res.cookie('jwtToken', token);
res.redirect('/social_auth');
}
);
app.post(
'/connect/local',
passport.authenticate('local-signup', {
successRedirect: '/profile', // redirect to the secure profile section
failureRedirect: '/connect/local', // redirect back to the signup page
failureFlash: true // allow flash messages
})
);
// facebook ------- authorization.
app.get(
'/connect/facebook',
passport.authorize('facebook', {
scope: ['public_profile', 'email']
})
);
// handle the callback after facebook has authorized the user
app.get(
'/connect/facebook/callback',
passport.authorize('facebook', {
successRedirect: '/profile',
failureRedirect: '/'
})
);
// route middlewarer to ensure user is logged in before authorization
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) return next();
res.redirect('/');
}
};