Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Myuser.loginFacebook = function(fbId, fbToken, userId, options, callback) {
- /**
- * Check if fb id and fb token is exist or not, if exist return error
- */
- var fbUser = {
- fbId: fbId
- };
- Myuser.findOne({ where: fbUser })
- .then(fUser => {
- if (fUser) {
- /**
- * If user id is not provided then it will be treated as login
- * If userId exist but not equal to found user id, then error: fbId already bound
- * If userId exist and equal => do nothing (return user)
- */
- if (!userId) {
- createToken(fUser);
- } else if (fUser.userId !== userId) {
- var err = new Error('Facebook account is already bound to another user');
- err.statusCode = 400;
- err.code = 'INFORMATION_NOT_VALID';
- callback(err);
- } else {
- callback(null, fUser);
- }
- } else {
- var fbData;
- axios.get(`https://graph.facebook.com/${fbId}?fields=id,name,email&access_token=${fbToken}`)
- .then((response) => {
- if (response.data.id == fbId) {
- fbData = response.data;
- validateData();
- } else {
- var err = new Error('Facebook Id or Token is not valid');
- err.statusCode = 400;
- err.code = 'INFORMATION_NOT_VALID';
- callback(err);
- }
- })
- .catch(err => {
- callback(err)
- });
- function validateData() {
- /**
- * If userId not exist create new user
- * If userId exist update attributes
- */
- if (!userId) {
- let userCred = {
- username: `facebook.${fbId}`,
- email: fbData.email,
- name: fbData.name,
- fbId: fbId,
- fbToken: fbToken,
- password: randomString()
- };
- Myuser.create(userCred)
- .then(user => {
- createToken(user);
- })
- .catch(err => {
- callback(err);
- })
- } else {
- let where = { userId: userId };
- Myuser.findOne({ where: where })
- .then(updateUser => {
- updateUser.updateAttributes(fbUser).then(upUser => {
- callback(null, upUser);
- }).catch(err => {
- callback(err);
- })
- })
- .catch(err => {
- callback(err);
- });
- }
- }
- }
- function createToken(user) {
- user.createAccessToken(DEFAULT_TTL)
- .then(token => {
- callback(null, token)
- })
- .catch(err => {
- callback(err);
- })
- }
- })
- .catch(err => {
- callback(err);
- })
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement