Advertisement
rizkysyarif

login fb

Feb 16th, 2020
791
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Myuser.loginFacebook = function(fbId, fbToken, userId, options, callback) {
  2.         /**
  3.          * Check if fb id and fb token is exist or not, if exist return error
  4.          */
  5.         var fbUser = {
  6.             fbId: fbId
  7.         };
  8.  
  9.         Myuser.findOne({ where: fbUser })
  10.             .then(fUser => {
  11.                 if (fUser) {
  12.                     /**
  13.                      * If user id is not provided then it will be treated as login
  14.                      * If userId exist but not equal to found user id, then error: fbId already bound
  15.                      * If userId exist and equal => do nothing (return user)
  16.                      */
  17.                     if (!userId) {
  18.                         createToken(fUser);
  19.                     } else if (fUser.userId !== userId) {
  20.                         var err = new Error('Facebook account is already bound to another user');
  21.                         err.statusCode = 400;
  22.                         err.code = 'INFORMATION_NOT_VALID';
  23.                         callback(err);
  24.                     } else {
  25.                         callback(null, fUser);
  26.                     }
  27.                 } else {
  28.                     var fbData;
  29.  
  30.                     axios.get(`https://graph.facebook.com/${fbId}?fields=id,name,email&access_token=${fbToken}`)
  31.                         .then((response) => {
  32.                             if (response.data.id == fbId) {
  33.                                 fbData = response.data;
  34.  
  35.                                 validateData();
  36.                             } else {
  37.                                 var err = new Error('Facebook Id or Token is not valid');
  38.                                 err.statusCode = 400;
  39.                                 err.code = 'INFORMATION_NOT_VALID';
  40.                                 callback(err);
  41.                             }
  42.                         })
  43.                         .catch(err => {
  44.                             callback(err)
  45.                         });
  46.  
  47.                     function validateData() {
  48.                         /**
  49.                          * If userId not exist create new user
  50.                          * If userId exist update attributes
  51.                          */
  52.                         if (!userId) {
  53.                             let userCred = {
  54.                                 username: `facebook.${fbId}`,
  55.                                 email: fbData.email,
  56.                                 name: fbData.name,
  57.                                 fbId: fbId,
  58.                                 fbToken: fbToken,
  59.                                 password: randomString()
  60.                             };
  61.  
  62.                             Myuser.create(userCred)
  63.                                 .then(user => {
  64.                                     createToken(user);
  65.                                 })
  66.                                 .catch(err => {
  67.                                     callback(err);
  68.                                 })
  69.                         } else {
  70.                             let where = { userId: userId };
  71.                             Myuser.findOne({ where: where })
  72.                                 .then(updateUser => {
  73.                                     updateUser.updateAttributes(fbUser).then(upUser => {
  74.                                         callback(null, upUser);
  75.                                     }).catch(err => {
  76.                                         callback(err);
  77.                                     })
  78.                                 })
  79.                                 .catch(err => {
  80.                                     callback(err);
  81.                                 });
  82.                         }
  83.                     }
  84.                 }
  85.  
  86.                 function createToken(user) {
  87.                     user.createAccessToken(DEFAULT_TTL)
  88.                         .then(token => {
  89.                             callback(null, token)
  90.                         })
  91.                         .catch(err => {
  92.                             callback(err);
  93.                         })
  94.                 }
  95.             })
  96.             .catch(err => {
  97.                 callback(err);
  98.             })
  99.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement