Advertisement
Guest User

Untitled

a guest
Jun 10th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.86 KB | None | 0 0
  1. var LocalStrategy = require('passport-local').Strategy;
  2. var FacebookStrategy = require('passport-facebook').Strategy;
  3. var TwitterStrategy = require('passport-twitter').Strategy;
  4. var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
  5. var User = require('../app/models/db/user');
  6. var configAuth = require('./auth'); //載入金鑰
  7.  
  8. module.exports = function (passport) {
  9.  
  10. //passport設定
  11. // used to serialize the user for the session
  12. passport.serializeUser(function (user, done) {
  13. done(null, user.id);
  14. });
  15.  
  16. // used to deserialize the user
  17. passport.deserializeUser(function (id, done) {
  18. User.findById(id, function (err, user) {
  19. done(err, user);
  20. });
  21. });
  22. // local login
  23. passport.use('local-login', new LocalStrategy({
  24.  
  25. usernameField: 'email',
  26. passwordField: 'password',
  27. passReqToCallback: true
  28. },
  29. function (req, email, password, done) {
  30. if (email)
  31. email = email.toLowerCase();
  32. process.nextTick(function () {
  33. User.findOne({
  34. 'local.email': email
  35. }, function (err, user) {
  36. if (err)
  37. return done(err);
  38. if (!user)
  39. return done(null, false, req.flash('登入訊息', '找不到使用者'));
  40.  
  41. if (!user.validPassword(password))
  42. return done(null, false, req.flash('登入訊息', '密碼錯誤'));
  43. else
  44. return done(null, user);
  45. });
  46. });
  47.  
  48. }));
  49.  
  50. // 本機註冊
  51. passport.use('local-signup', new LocalStrategy({
  52. usernameField: 'email',
  53. passwordField: 'password',
  54. usernameField: 'username',
  55. birthdayField: 'birthday',
  56. psexField: 'sex',
  57. passReqToCallback: true
  58.  
  59. },
  60. function (req, email, password, username, birthday, sex, done) {
  61. if (email)
  62. email = email.toLowerCase();
  63. process.nextTick(function () {
  64. if (!req.user) {
  65. User.findOne({
  66. 'local.email': email
  67. }, function (err, user) {
  68. if (err)
  69. return done(err);
  70. if (user) {
  71. return done(null, false, req.flash('註冊訊息', '這個帳號已經被使用過了'));
  72. } else {
  73.  
  74. // create the user
  75. var newUser = new User();
  76. newUser.local.email = email;
  77. newUser.local.password = newUser.generateHash(password);
  78. newUser.local.username = username;
  79. newUser.local.birthday = birthday;
  80. newUser.local.sex = sex;
  81. newUser.save(function (err) {
  82. if (err)
  83. return done(err);
  84.  
  85. return done(null, newUser);
  86. });
  87. }
  88.  
  89. });
  90. } else if (!req.user.local.email) {
  91. User.findOne({
  92. 'local.email': email
  93. }, function (err, user) {
  94. if (err)
  95. return done(err);
  96.  
  97. if (user) {
  98. return done(null, false, req.flash('登入訊息', '這個帳號已經被註冊過了'));
  99. } else {
  100. var user = req.user;
  101. user.local.email = email;
  102. user.local.password = user.generateHash(password);
  103. user.local.username = username;
  104. user.local.birthday = birthday;
  105. user.local.sex = sex;
  106. user.save(function (err) {
  107. if (err)
  108. return done(err);
  109.  
  110. return done(null, user);
  111. });
  112. }
  113. });
  114. } else {
  115. return done(null, req.user, req.flash('登入訊息', '用戶登入中,請確認是否使用其他裝置登入中'));
  116. }
  117.  
  118. });
  119.  
  120. }));
  121.  
  122. //臉書
  123. var fbStrategy = configAuth.facebookAuth;
  124. fbStrategy.passReqToCallback = true;
  125. passport.use(new FacebookStrategy(fbStrategy,
  126. function (req, token, refreshToken, home, done) {
  127. process.nextTick(function () {
  128.  
  129. if (!req.user) {
  130.  
  131. User.findOne({
  132. 'facebook.id': home.id
  133. }, function (err, user) {
  134. if (err)
  135. return done(err);
  136.  
  137. if (user) {
  138. if (!user.facebook.token) {
  139. user.facebook.token = token;
  140. user.facebook.name = home.name.givenName + ' ' + home.name.familyName;
  141. user.facebook.email = (home.emails[0].value || '').toLowerCase();
  142. user.save(function (err) {
  143. if (err)
  144. return done(err);
  145.  
  146. return done(null, user);
  147. });
  148. }
  149.  
  150. return done(null, user);
  151.  
  152. } else {
  153.  
  154. var newUser = new User();
  155.  
  156. newUser.facebook.id = home.id;
  157. newUser.facebook.token = token;
  158. newUser.facebook.name = home.name.givenName + ' ' + home.name.familyName;
  159. newUser.facebook.email = (home.emails[0].value || '').toLowerCase();
  160. // newUser.facebook.birthday = home.birthday;
  161. // newUser.facebook.sex = home.sex;
  162.  
  163. newUser.save(function (err) {
  164. if (err)
  165. return done(err);
  166.  
  167. return done(null, newUser);
  168. });
  169. }
  170. });
  171.  
  172. } else {
  173.  
  174. var user = req.user;
  175. user.facebook.id = home.id;
  176. user.facebook.token = token;
  177. user.facebook.name = home.name.givenName + ' ' + home.name.familyName;
  178. user.facebook.email = (home.emails[0].value || '').toLowerCase();
  179. // user.facebook.birthday =home.birthday;
  180. // user.facebook.sex =home.sex;
  181.  
  182. user.save(function (err) {
  183. if (err)
  184. return done(err);
  185.  
  186. return done(null, user);
  187. });
  188.  
  189. }
  190. });
  191.  
  192. }));
  193.  
  194.  
  195. // TWITTER
  196.  
  197. passport.use(new TwitterStrategy({
  198.  
  199. consumerKey: configAuth.twitterAuth.consumerKey,
  200. consumerSecret: configAuth.twitterAuth.consumerSecret,
  201. callbackURL: configAuth.twitterAuth.callbackURL,
  202. passReqToCallback: true
  203.  
  204.  
  205. },
  206. function (req, token, tokenSecret, home, done) {
  207.  
  208.  
  209. process.nextTick(function () {
  210.  
  211.  
  212. if (!req.user) {
  213.  
  214. User.findOne({
  215. 'twitter.id': home.id
  216. }, function (err, user) {
  217. if (err)
  218. return done(err);
  219.  
  220. if (user) {
  221.  
  222. if (!user.twitter.token) {
  223. user.twitter.token = token;
  224. user.twitter.username = home.username;
  225. user.twitter.displayName = home.displayName;
  226. // user.twitter.birthday = home.birthday;
  227. // user.twitter.sex = home.sex;
  228. user.save(function (err) {
  229. if (err)
  230. return done(err);
  231.  
  232. return done(null, user);
  233. });
  234. }
  235.  
  236. return done(null, user);
  237.  
  238. } else {
  239.  
  240. var newUser = new User();
  241.  
  242. newUser.twitter.id = home.id;
  243. newUser.twitter.token = token;
  244. newUser.twitter.username = home.username;
  245. newUser.twitter.displayName = home.displayName;
  246. // newUser.twitter.birthday = home.birthday;
  247. // newUser.twitter.sex = home.sex;
  248.  
  249. newUser.save(function (err) {
  250. if (err)
  251. return done(err);
  252.  
  253. return done(null, newUser);
  254. });
  255. }
  256. });
  257.  
  258. } else {
  259.  
  260. var user = req.user;
  261.  
  262.  
  263. user.twitter.id = home.id;
  264. user.twitter.token = token;
  265. user.twitter.username = home.username;
  266. user.twitter.displayName = home.displayName;
  267. // user.twitter.birthday = home.birthday;
  268. // user.twitter.sex = home.sex;
  269.  
  270. user.save(function (err) {
  271. if (err)
  272. return done(err);
  273.  
  274. return done(null, user);
  275. });
  276. }
  277.  
  278. });
  279.  
  280. }));
  281.  
  282.  
  283. // GOOGLE
  284. passport.use(new GoogleStrategy({
  285.  
  286. clientID: configAuth.googleAuth.clientID,
  287. clientSecret: configAuth.googleAuth.clientSecret,
  288. callbackURL: configAuth.googleAuth.callbackURL,
  289. passReqToCallback: true
  290.  
  291.  
  292. },
  293. function (req, token, refreshToken, home, done) {
  294.  
  295.  
  296. process.nextTick(function () {
  297.  
  298.  
  299. if (!req.user) {
  300.  
  301. User.findOne({
  302. 'google.id': home.id
  303. }, function (err, user) {
  304. if (err)
  305. return done(err);
  306.  
  307. if (user) {
  308.  
  309.  
  310. if (!user.google.token) {
  311. user.google.token = token;
  312. user.google.name = home.displayName;
  313. user.google.email = (home.emails[0].value || '').toLowerCase();
  314. // user.google.birthday = home.birthday;
  315. // user.google.sex = home.sex;
  316.  
  317. user.save(function (err) {
  318. if (err)
  319. return done(err);
  320.  
  321. return done(null, user);
  322. });
  323. }
  324.  
  325. return done(null, user);
  326. } else {
  327. var newUser = new User();
  328.  
  329. newUser.google.id = home.id;
  330. newUser.google.token = token;
  331. newUser.google.name = home.displayName;
  332. newUser.google.email = (home.emails[0].value || '').toLowerCase();
  333. // newUser.twitter.birthday = home.birthday;
  334. // newUser.twitter.sex = home.sex;
  335.  
  336. newUser.save(function (err) {
  337. if (err)
  338. return done(err);
  339.  
  340. return done(null, newUser);
  341. });
  342. }
  343. });
  344.  
  345. } else {
  346.  
  347. var user = req.user;
  348.  
  349. user.google.id = home.id;
  350. user.google.token = token;
  351. user.google.name = home.displayName;
  352. user.google.email = (home.emails[0].value || '').toLowerCase();
  353. // user.google.birthday = home.birthday;
  354. // user.google.sex = home.sex;
  355.  
  356. user.save(function (err) {
  357. if (err)
  358. return done(err);
  359.  
  360. return done(null, user);
  361. });
  362.  
  363. }
  364.  
  365. });
  366.  
  367. }));
  368.  
  369. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement