Guest User

Untitled

a guest
Jan 3rd, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. const express = require('express');
  2. var bcrypt = require('bcrypt');
  3.  
  4. const app = express();
  5. const port = 3000;
  6.  
  7. const bodyParser = require('body-parser');
  8. const jwt = require('jsonwebtoken');
  9. const passport = require('passport');
  10. const passportJwt = require('passport-jwt');
  11.  
  12. const { Strategy, ExtractJwt } = passportJwt;
  13.  
  14. const secretToken = 'secret';
  15.  
  16. const jwtOptions = {
  17. jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('jwt'),
  18. secretOrKey: secretToken
  19. };
  20.  
  21. app.use(bodyParser.urlencoded({ extended: true }));
  22. app.use(bodyParser.json());
  23.  
  24. const fakeUser = { email: 'admin', password: createHash('admin'), id: 1 }
  25.  
  26. passport.use(new Strategy(jwtOptions, (payload, next) => {
  27. console.info('payload>>>>', payload)
  28. if (payload.id === fakeUser.id) {
  29. return next(null, { user: 'user' });
  30. }
  31.  
  32. return next(null, false);
  33. }));
  34.  
  35. app.use(passport.initialize());
  36.  
  37. app.get('/', (req, res) => {
  38. res.json({
  39. message: 'App is running...'
  40. })
  41. })
  42.  
  43. app.use('/api', passport.authenticate('jwt', {session: false}), (req, res) => {
  44. res.json({
  45. message: 'Protected Route!!!!!!'
  46. })
  47. });
  48.  
  49. app.listen(port, () => console.info(`Starting app on PORT: ${port}`))
  50.  
  51. app.post("/signin", (req, res) => {
  52. const { email, password } = req.body;
  53.  
  54. // todo: call to db here
  55. const user = fakeUser;
  56.  
  57. // check for password
  58. if(!user || !comparePass('admin', user.password)) return authError(res);
  59.  
  60. const payload = {id: user.id};
  61. const token = jwt.sign(payload, jwtOptions.secretOrKey);
  62.  
  63. res.json({message: "ok", token: token});
  64. });
  65.  
  66. // Utils
  67. function authError(res) {
  68. return res.status(401).json({message:"Invalid email or password"})
  69. }
  70.  
  71. function createHash(password) {
  72. const saltRounds = 10;
  73.  
  74. return bcrypt.hashSync(password, saltRounds);
  75. }
  76.  
  77. function comparePass(password, hash) {
  78. return bcrypt.compareSync(password, hash);
  79. }
Add Comment
Please, Sign In to add comment