Sunday, 23 April 2017

Passport.js / Express.js Connection Refused

When I have all of my code in app.js, authenticating with Google works fine, but I tried breaking out the authentication routes in their own files and now I get a connection refused.

//authRouter.js
const express = require("express");
const authRouter = express.Router();
const SECRETS = require("../config/secrets");
const GoogleStrategy = require("passport-google-oauth").OAuth2Strategy;
const passport = require("passport");
passport.use(new GoogleStrategy(SECRETS.google,
  (accessToken, refreshToken, profile, done) => {
    return done(null, profile);
  })
);

authRouter.get("/google", passport.authenticate('google', { scope: ['openid email profile'] }));
authRouter.get("/google/callback",
  passport.authenticate("google",
  {
    failureRedirect: "/login",
    successRedirect: "/"
  },
  (req, res) => {
    res.render("hello world"); //successful auth, redirect home, but res is undefined
  })
)
module.exports = authRouter;

//app.js
var authConfig = require('./config/secrets'),
  express = require('express'),
  passport = require('passport'),
  TwitterStrategy = require("passport-google-oauth").OAuth2Strategy,
  SECRETS = require("./config/secrets"),
  authRoutes = require("./routes/authRoutes");

passport.serializeUser((user, done) => {

  done(null, user);
});

passport.deserializeUser((obj, done) => {
  done(null, obj);
});
//setup for previously working Google auth
// passport.use(new GoogleStrategy(

//   authConfig.google,

//   (accessToken, refreshToken, profile, done) => {
//     return done(null, profile);
//   }
// ));


var app = express();
app.set('view engine', 'hbs');

var logger = require('morgan');
var cookieParser = require('cookie-parser');
var session = require('express-session');

app.use(logger('dev'));
app.use(cookieParser());
app.use(session({
  secret: 'secret',
  resave: false,
  saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());

app.use(express.static(__dirname + '/public'));


// Application routes

app.get('/', (req, res) => {
  res.render('index', {
    user: req.user
  });
});

app.get('/login', (req, res) => {
  res.render('login', {
    user: req.user
  });
});

//previously working google auth
// app.get('/auth/google',
//   passport.authenticate('google', { scope: ['openid email profile'] }));

// app.get('/auth/google/callback',
//   passport.authenticate('google', {
//     failureRedirect: '/login'
//   }),
//   (req, res) => {
//     // Authenticated successfully
//     res.redirect('/');
//   });

//**registering authentication routes
app.use("/auth", authRoutes);
app.get('/account', ensureAuthenticated, (req, res) => {
  res.render('account', {
    user: req.user
  });
});

app.get('/logout', (req, res) => {
  req.logout();
  res.redirect('/');
});

app.listen(process.env.PORT || 3000, () => {
  console.log("Listening...");
});


function ensureAuthenticated(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  }
  res.redirect('/login');
}

When I visit the app in a browser where I am logged i to Google, I get a connection refused. I know the credentials are correct, and it's likely some express setup I'm missing. Any thoughts? Thanks in advance.



via wootscootinboogie

No comments:

Post a Comment