Advertisement
Guest User

Untitled

a guest
Sep 4th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. //imports
  2. const app = require('express')(),
  3. session = require('express-session'),
  4. bodyParser = require('body-parser'),
  5. jwt = require('jsonwebtoken'),
  6. passport = require('passport'),
  7. {Strategy, ExtractJwt} = require('passport-jwt'),
  8. LocalStrategy = require('passport-local'),
  9. FacebookStrategy = require('passport-facebook'),
  10. TwitterStrategy = require('passport-twitter'),
  11. GoogleStrategy = require('passport-google-oauth').OAuth2Strategy,
  12. {fb, twitter, google} = require('./authInfo'),
  13. {hashSync,compareSync, genSaltSync} = require('bcryptjs'),
  14. mongoose = require('mongoose'),
  15. {connection, Schema}=mongoose
  16.  
  17.  
  18.  
  19.  
  20.  
  21. //db config
  22. mongoose.Promise=global.Promise
  23. mongoose.connect('mongodb://localhost/test')
  24. connection.on('error', console.error.bind(console, 'connection error:'));
  25. connection.once('open', ()=> console.log('connected to DB!'))
  26.  
  27.  
  28. //model setup
  29. const userSchema = new Schema({username: String, password: String})
  30. userSchema.pre('save', function(next){
  31. this.password=hashSync(this.password, genSaltSync(10))
  32. next()
  33. })
  34. const User = mongoose.model('User', userSchema)
  35.  
  36.  
  37. //global mids
  38. app.use(bodyParser.urlencoded({ extended: true }))
  39. app.use(bodyParser.json())
  40. app.use(session({secret:'secret',resave: true,saveUninitialized: true}))
  41. app.use(passport.initialize())
  42. app.use(passport.session())
  43.  
  44.  
  45.  
  46.  
  47. //strategies
  48. const userLogin = new LocalStrategy((username, password, done)=>{
  49. User.findOne({username})
  50. .then(userFromDB=>{
  51. compareSync(password, userFromDB.password) ? done(null, userFromDB) : done(null, false)
  52. }).catch(e=>done(e))
  53. })
  54.  
  55.  
  56. const jwtOptions={
  57. jwtFromRequest: ExtractJwt.fromHeader("authorization"),
  58. secretOrKey: 'secret'
  59. }
  60. const jwtLogin = new Strategy(jwtOptions, (fromPassport, done)=>{
  61. User.findById(fromPassport._id)
  62. .then(userFromDB=>{userFromDB ? done(null, userFromDB) : done(null, false)
  63. }).catch(e=>done(e))
  64. })
  65.  
  66.  
  67. const fbLogin = new FacebookStrategy(fb, (accessToken, refreshToken, profile, done)=> done(null, profile))
  68. const twitterLogin = new TwitterStrategy(twitter, (token, tokenSecret, profile, done)=>done(null, profile))
  69. const googleLogin = new GoogleStrategy(google, (accessToken, refreshToken, profile, done)=>done(null, profile))
  70.  
  71.  
  72. passport.use('local',userLogin)
  73. passport.use('jwt',jwtLogin)
  74. passport.use('facebook',fbLogin)
  75. passport.use('twitter',twitterLogin)
  76. passport.use('google',googleLogin)
  77. passport.serializeUser((user, done)=>done(null, user.id))
  78. passport.deserializeUser((id, done)=>User.findById(id).then(userFromDB=>done(user)))
  79.  
  80.  
  81. const signToken = _id=>jwt.sign({_id}, "secret" )
  82.  
  83. app.get('/', passport.authenticate('jwt', {session:false}), (req,res)=> res.send('Protected Resource'))
  84.  
  85. app.get('/auth/facebook', passport.authenticate('facebook'))
  86. app.get('/auth/facebook/callback', passport.authenticate('facebook', {session:false}), (req, res)=> res.send(req.user))
  87.  
  88. app.get('/auth/google', passport.authenticate('google', { scope : ['profile', 'email'] } ))
  89. app.get('/auth/google/callback', passport.authenticate('google'), (req, res)=> res.send(req.user))
  90.  
  91. app.get('/auth/twitter', passport.authenticate('twitter'))
  92. app.get('/auth/twitter/callback', passport.authenticate('twitter'), (req, res)=> res.send(req.user))
  93.  
  94.  
  95.  
  96. app.post('/signup', (req, res)=>{
  97. const {username, password} = req.body
  98. User.findOne({username})
  99. .then(userFromDB=>{
  100. if(userFromDB) res.status(422).send('Username is already use')
  101. else if (!username || !password) res.status(422).send('Must provide an username and password')
  102. else new User(req.body).save().then(savedUser=>res.json({token: signToken(savedUser._id)}))
  103. }).catch(e=>res.status(400).send(e.message))
  104. })
  105.  
  106.  
  107.  
  108. app.post('/signin', passport.authenticate('local', {session:false}), (req,res)=>{
  109. res.json({token: signToken(req.user._id)})
  110. })
  111.  
  112.  
  113. app.listen(process.env.PORT, console.log(`on ${process.env.PORT}`))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement