Advertisement
Guest User

Untitled

a guest
Mar 15th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  1. const passport = require("passport");
  2. const LocalStrategy = require("passport-local");
  3. const FacebookStrategy = require('passport-facebook').Strategy;
  4. const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
  5. const dotenv = require("dotenv");
  6. const bcrypt = require('bcryptjs');
  7. const Users = require('../db/models/users');
  8.  
  9. dotenv.config();
  10.  
  11. passport.serializeUser((user, done) => {
  12. done(null, user.id);
  13. });
  14.  
  15. passport.deserializeUser(async (id, done) => {
  16. const user = await Users.findById(id);
  17. if(user) {
  18. done(null, user);
  19. } else {
  20. done(error, null);
  21. }
  22. });
  23.  
  24. passport.use(
  25. 'local-Login',
  26. new LocalStrategy(
  27. {
  28. usernameField: 'username',
  29. passwordField: 'password',
  30. passReqToCallback: true,
  31. },
  32. async (req, login, password, done) => {
  33. let user = await Users.findOne({ where: {
  34. $or: [
  35. {email: login},
  36. {username: login}
  37. ]}
  38. });
  39. if (user !== null) {
  40. bcrypt.compare(
  41. password,
  42. `$2a${user.password.substring(3)}`,
  43. (error, result) => {
  44. if (!result) {
  45. return done(null, false, {
  46. error: true,
  47. info: 'Oops! Wrong password.',
  48. });
  49. }
  50. if (error) return done(error);
  51. return done(null, user);
  52. },
  53. );
  54. } else {
  55. return done(null, false, {
  56. error: true,
  57. info: 'User not found',
  58. });
  59. }
  60. },
  61. ),
  62. );
  63.  
  64. passport.use(
  65. 'local-signup',
  66. new LocalStrategy(
  67. {
  68. usernameField: 'username',
  69. passwordField: 'password',
  70. passReqToCallback: true,
  71. },
  72. async (req, username, password, done) => {
  73. const {email, name} = req.body;
  74. let user = await Users.findOne({ where: {
  75. $or: [
  76. {email},
  77. {username}
  78. ]}
  79. });
  80. if (user) {
  81. return done(null, false, {
  82. error: true,
  83. info: user.username == username ? 'Username already taken' : 'Email already taken',
  84. });
  85. } else {
  86. user = await Users.create({
  87. username,
  88. email,
  89. name,
  90. password: bcrypt.hashSync(password, 10),
  91. });
  92. return done(null, user);
  93. }
  94. },
  95. ),
  96. );
  97.  
  98. passport.use(
  99. 'google',
  100. new GoogleStrategy(
  101. {
  102. clientID: process.env.GOOGLE_ID,
  103. clientSecret: process.env.GOOGLE_SECRET,
  104. callbackURL: '/auth/google/callback',
  105. proxy: true
  106. },
  107. async (token, tokenSecret, profile, done) => {
  108. let user = await Users.findOne({ where: { googleID: profile.id }});
  109. if (user) {
  110. return done(null, user)
  111. } else {
  112. user = await Users.create({
  113. name: profile.displayName,
  114. email: profile.emails[0].value,
  115. googleID: profile.id,
  116. });
  117. return done(null, user);
  118. }
  119. },
  120. ),
  121. );
  122.  
  123. passport.use(
  124. 'facebook',
  125. new FacebookStrategy (
  126. {
  127. clientID: process.env.FB_ID,
  128. clientSecret: process.env.FB_SECRET,
  129. callbackURL: process.env.FB_CALLBACK_URL,
  130. proxy: true
  131. },
  132. async (token, tokenSecret, profile, done) => {
  133. let user = await Users.findOne({ where: { facebookID: profile.id }});
  134. if (user) {
  135. return done(null, user)
  136. } else {
  137. user = await Users.create({
  138. name: profile.displayName,
  139. facebookID: profile.id,
  140. created: Date.now(),
  141. });
  142. return done(null, user);
  143. }
  144. },
  145. ),
  146. );
  147.  
  148. module.exports = passport;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement