daily pastebin goal
7%
SHARE
TWEET

Untitled

a guest May 17th, 2018 101 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var vkStrategy = configAuth.vkAuth;
  2. var User = require('../app/models/user');
  3.  
  4. vkStrategy.passReqToCallback = true; // проверет, вошел ли пользователь в систему или нет
  5. passport.use(new VKStrategy(vkStrategy,
  6.   function(req, accessToken, refreshToken, params, profile, done) {
  7.  
  8.     //     function (req, token, refreshToken, profile, done) {
  9.     // ассинхронность
  10.     process.nextTick(function() {
  11.  
  12.       // проверка существования логина
  13.       if (!req.user) {
  14.  
  15.         User.findOrCreate({
  16.           vkontakteId: profile.id
  17.         }, function(err, user) {
  18.           //   User.findOne({'vkontakte.id': profile.id}, function (err, user) {
  19.           if (err)
  20.             return done(err);
  21.           if (user) {
  22.             if (!user.vkontakte.token) {
  23.               user.vkontakte.token = token;
  24.               user.vkontakte.name = profile.name.givenName + ' ' + profile.name.familyName;
  25.               user.vkontakte.email = (profile.emails[0].value || '').toLowerCase();
  26.  
  27.               user.save(function(err) {
  28.                 if (err)
  29.                   return done(err);
  30.  
  31.                 return done(null, user);
  32.               });
  33.             }
  34.  
  35.             return done(null, user); //если пользователь найден
  36.           } else {
  37.             // если нет, создаем нового
  38.             var newUser = new User();
  39.  
  40.             newUser.vkontakte.id = profile.id;
  41.             newUser.vkontakte.token = token;
  42.             newUser.vkontakte.name = profile.name.givenName + ' ' + profile.name.familyName;
  43.             newUser.vkontakte.email = (profile.emails[0].value || '').toLowerCase();
  44.  
  45.             newUser.save(function(err) {
  46.               if (err)
  47.                 return done(err);
  48.  
  49.               return done(null, newUser);
  50.             });
  51.           }
  52.         });
  53.  
  54.       } else {
  55.         // пользователь существует и вошел в систему, аккаунты связываются
  56.         var user = req.user;
  57.  
  58.         user.vkontakte.id = profile.id;
  59.         user.vkontakte.token = token;
  60.         user.vkontakte.name = profile.name.givenName + ' ' + profile.name.familyName;
  61.         user.vkontakte.email = (profile.emails[0].value || '').toLowerCase();
  62.  
  63.         user.save(function(err) {
  64.           if (err)
  65.             return done(err);
  66.  
  67.           return done(null, user);
  68.         });
  69.  
  70.       }
  71.     });
  72.  
  73.   }));
  74.    
  75. module.exports = {
  76.     'vkAuth': {
  77.         'lang': 'ru',
  78.         'clientID'  : '###',
  79.         'clientSecret' : '#######',
  80.         'callbackURL' : 'http://localhost:8080/auth/vkontakte/callback',
  81.         'profileFields' : ['id', 'email', 'name']
  82.     }
  83. }
  84.    
  85. var mongoose = require('mongoose');
  86. var bcrypt   = require('bcrypt-nodejs');
  87. var userSchema = mongoose.Schema({
  88.    vkontakte        : {
  89.         id           : String,
  90.         token        : String,
  91.         email        : String,
  92.         name         : String
  93.     }
  94.  
  95. });
  96. module.exports = mongoose.model('User', userSchema);
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top