index.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. var passport = require('passport');
  2. var GitHubStrategy = require('passport-github').Strategy;
  3. var r = require('../db');
  4. passport.serializeUser(function (user, done) {
  5. return done(null, user.id);
  6. });
  7. passport.deserializeUser(function (id, done) {
  8. r
  9. .table('users')
  10. .get(id)
  11. .run(r.conn)
  12. .then(function (user) {
  13. done(null, user);
  14. });
  15. });
  16. var loginCallbackHandler = function (objectMapper, type) {
  17. return function (accessToken, refreshToken, profile, done) {
  18. if (accessToken !== null) {
  19. r
  20. .table('users')
  21. .getAll(profile.username, { index: 'login' })
  22. .filter({ type: type })
  23. .run(r.conn)
  24. .then(function (cursor) {
  25. return cursor.toArray()
  26. .then(function (users) {
  27. if (users.length > 0) {
  28. return done(null, users[0]);
  29. }
  30. return r.table('users')
  31. .insert(objectMapper(profile))
  32. .run(r.conn)
  33. .then(function (response) {
  34. return r.table('users')
  35. .get(response.generated_keys[0])
  36. .run(r.conn);
  37. })
  38. .then(function (newUser) {
  39. done(null, newUser);
  40. });
  41. });
  42. })
  43. .catch(function (err) {
  44. console.log('Error Getting User', err);
  45. });
  46. }
  47. };
  48. };
  49. var callbackURL = 'http://127.0.0.1:3000/auth/login/callback';
  50. // Github
  51. passport.use(new GitHubStrategy({
  52. clientID: "c5516f218aa8682ac67d",
  53. clientSecret: "5a3ee482ab2eb4ade56ab6ea01fd7544dd9a9be9",
  54. callbackURL: callbackURL + '/github'
  55. },
  56. loginCallbackHandler(function (profile) {
  57. return {
  58. 'login': profile.username,
  59. 'name': profile.displayName || null,
  60. 'url': profile.profileUrl,
  61. 'avatarUrl': profile._json.avatar_url,
  62. 'type': 'github'
  63. };
  64. }, 'github')
  65. ));
  66. passport.checkIfLoggedIn = function (req, res, next) {
  67. if (req.user) {
  68. return next();
  69. }
  70. return res.status(401).send('You\'re not logged in');
  71. };
  72. module.exports = passport;