Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. var LocalStrategy = require('passport-local').Strategy;
  2. passport.use(
  3. new LocalStrategy(
  4. {
  5. usernameField: 'username',
  6. passwordField: 'password',
  7. },
  8. (username, password, done) => {
  9. let session = driver.session();
  10. session
  11. .run(
  12. 'MATCH (u:User) WHERE u.username = {username} AND u.password = {password} RETURN u as user',
  13. { username, password }
  14. )
  15. .then(results => {
  16. try {
  17. let user = results.records[0].get('user').properties;
  18. done(null, user);
  19. } catch (err) {
  20. done(null, false);
  21. } finally {
  22. session.close();
  23. }
  24. })
  25. .catch(err => {
  26. session.close();
  27. done(err);
  28. });
  29. }
  30. )
  31. );
  32.  
  33. passport.serializeUser(function(user, done) {
  34. done(null, user.username);
  35. });
  36.  
  37. passport.deserializeUser(async (username, done) => {
  38. let session = driver.session();
  39. try {
  40. let results = await session.run(
  41. 'MATCH (u:User) WHERE u.username = {username} RETURN u AS user;',
  42. { username }
  43. );
  44. let user = results.records[0].get('user').properties;
  45. done(null, user);
  46. } catch (err) {
  47. done(err, false);
  48. } finally {
  49. session.close();
  50. }
  51. });
  52.  
  53. app.use(passport.initialize());
  54. app.use(passport.session());
  55.  
  56. const auth = (req, res, next) => {
  57. if (!req.isAuthenticated()) {
  58. res.sendStatus(401);
  59. res.end();
  60. } else {
  61. next();
  62. }
  63. };
  64.  
  65. app.post('/login', passport.authenticate('local'), (req, res) => {
  66. res.send(_.omit(req.user, 'password'));
  67. res.end();
  68. });
  69.  
  70. app.get('/logout', function(req, res) {
  71. req.logout();
  72. res.redirect('/login');
  73. });
  74.  
  75. app.get('/authenticated', auth, (req, res) => {
  76. res.send(_.omit(req.user, 'password'));
  77. res.end();
  78. });
  79.  
  80. app.post('/signup', async (req, res) => {
  81. let { username, password, password_repeat, email } = req.body;
  82. if (password !== password_repeat) {
  83. res.sendStatus(409);
  84. res.end();
  85. } else {
  86. try {
  87. let session = driver.session();
  88. let results = await session.run(
  89. `
  90. CREATE (u:User { username: {username}, password: {password}, email: {email} })
  91. RETURN u AS user;
  92. `,
  93. { username, password, email }
  94. );
  95.  
  96. let user = results.records[0].get('user').properties;
  97. req.login(user, err => {
  98. if (!err) {
  99. res.send(_.omit(user, 'password'));
  100. res.end();
  101. } else res.redirect('/login');
  102. });
  103. } catch (err) {
  104. console.error(err);
  105. res.status(400).send({ error: 'Username already exists.' });
  106. res.end();
  107. } finally {
  108. session.close();
  109. }
  110. }
  111. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement