Skip to content

Instantly share code, notes, and snippets.

@Archakov06
Created December 14, 2017 22:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Archakov06/952e19c4d487bc52a5eed708b0cd5ad7 to your computer and use it in GitHub Desktop.
Save Archakov06/952e19c4d487bc52a5eed708b0cd5ad7 to your computer and use it in GitHub Desktop.
// app.js
import express from 'express';
import bodyParser from 'body-parser';
import methodOverride from 'method-override';
import session from 'express-session';
import cookieParser from 'cookie-parser';
import errorHandler from 'errorhandler';
import morgan from 'morgan';
import flash from 'connect-flash';
import passport from './passport';
import './db';
import routes from '../routes';
let app = express();
app.set('port', process.env.PORT || 3333);
app.use(cookieParser());
app.use(morgan('dev'));
app.use(
bodyParser.urlencoded({
extended: true,
}),
);
app.use(bodyParser.json());
app.use(methodOverride());
app.use(
session({
secret: 'iBir9DL2G99OojUR',
saveUninitialized: true,
resave: true,
cookie: { secure: true, expires: false },
}),
);
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use('/', routes);
if ('development' === app.get('env')) {
app.use(errorHandler());
}
export default app;
// passport.js
import passport from 'passport';
import { Strategy as GitHubStrategy } from 'passport-github';
import User from '../models/User';
passport.use(
new GitHubStrategy(
{
clientID: 'XXX',
clientSecret: 'YYY',
callbackURL: 'http://localhost:3333/auth/github/callback',
},
function(accessToken, refreshToken, profile, done) {
User.findOne({ userId: profile.id }, (err, user) => {
if (err) {
return done(err);
}
if (!user) {
const obj = {
userId: profile.id,
username: profile.username,
fullname: profile.displayName,
email: profile.emails[0].value,
token: accessToken,
avatar: profile.photos[0].value,
profileUrl: profile.profileUrl,
provider: 'github',
};
const user = new User(obj);
user.save(err => {
if (err) {
console.log(err);
}
return done(err, user);
});
} else {
return done(err, user);
}
});
},
),
);
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, (err, user) => {
done(err, user);
});
});
export default passport;
// routes.js
import { Router } from 'express';
import passport from 'passport';
import User from './models/User';
const router = Router();
router.get('/', (req, res) => {
res.send('Hello!');
console.log(req.session);
});
router.get('/auth/github', passport.authenticate('github'));
router.get(
'/auth/github/callback',
passport.authenticate('github', {
successRedirect: '/',
failureRedirect: '/auth/error',
failureFlash: true,
}),
);
router.get('/logout', (req, res) => {
req.logout();
res.redirect('/');
});
router.get('/account', ensureAuthenticated, function(req, res) {
User.findById(req.session.passport.user, function(err, user) {
if (err) {
console.log(err); // handle errors
} else {
res.send(user);
}
});
});
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/403');
}
export default router;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment