Hello;
I have a strange thing where my GitHub strategy works to login, but when it redirects, it seems to fail and pump me back to “/” instead of “/chat”
I console log out the profile from github so for sure git hub has logged me in and sent back my profile, but somehow I can’t get past the redirect to get to /chat:
Any ideas what is causing it to fail(the code is passing the tests, but my app isn’t redirecting to “/chat”)…perhaps something to do with session?
Any ideas?
Same problem with the previous challenge : local strategy, passes tests, but the login redirect fails to show the logged in page…
my app: https://boilerplate-socketio.pauloconnell.repl.co/
My Routes.js:
const passport = require('passport');
module.exports = function (app, db) {
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
console.log("authentication failed")
res.redirect('/');
};
app.route('/auth/github')
.get(passport.authenticate('github'));
app.route('/auth/github/callback')
.get(passport.authenticate('github', { failureRedirect: '/' }), (req,res) => {
// req.session.user_id = req.user.id;
res.redirect("/chat");
});
app.route('/')
.get((req, res) => {
res.render(process.cwd() + '/views/pug/index');
});
app.route('/chat')
.get(ensureAuthenticated, (req, res) => {
// console.log(req.session);
res.render(process.cwd() + '/views/pug/chat', {user: req.user});
});
app.route('/logout')
.get((req, res) => {
req.logout();
res.redirect('/');
});
app.use((req, res, next) => {
res.status(404)
.type('text')
.send('Not Found');
});
}
and this is my server.js:
'use strict';
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const fccTesting = require('./freeCodeCamp/fcctesting.js');
const auth = require('./app/auth.js');
const routes = require('./app/routes.js');
const mongo = require('mongodb').MongoClient;
const passport = require('passport');
const cookieParser= require('cookie-parser')
const app = express();
const http = require('http').Server(app);
const sessionStore= new session.MemoryStore();
const io =require('socket.io')(http);
const passportSocketIo=require('passport.socketio');
const cors = require('cors');
app.use(cors());
fccTesting(app); //For FCC testing purposes
app.use('/public', express.static(process.cwd() + '/public'));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.set('view engine', 'pug')
app.use(session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true,
key: 'express.sid',
store: sessionStore,
}));
mongo.connect(process.env.DATABASE, (err, db) => {
if(err){
console.log('Database error: ' + err);
}else{
auth(app, db);
routes(app, db);
http.listen(process.env.PORT || 3000);
//start socket.io code
io.use(passportSocketIo.authorize({
cookieParser: cookieParser,
key: 'express.sid',
secret: process.env.SESSION_SECRET,
store: sessionStore
}));
var currentUsers = 0;
io.on('connection', socket => {
console.log('A user has connected');
++currentUsers;
//io.emit('user count', currentUsers);
io.emit("user", {name:socket.request.user.name, currentUsers, connected:true});
socket.on('chat message', (message)=>{
io.emit('chat message', {name: socket.request.user.name, message});
});
socket.on('disconnect', () => { /*anything you want to do on disconnect*/
console.log('a user had disconnected');
--currentUsers;
io.emit('user count', {name: socket.request.user.name, currentUsers, connected: false});
});
});
}
// defined in ROUTES.js app.route('/auth/github')
// .get(passport.authenticate('github'));
// app.route('/auth/github/callback')
// .get(passport.authenticate('github', {failureRedirect:'/'}), (req,res)=>{
// res.redirect('/profile');
// });
// //end socket.io code
});