Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not Able to Validate Server Side Login Using AccessToken and Fetch Profile Information #1367

Open
siddmegadeth opened this issue May 27, 2019 · 0 comments

Comments

@siddmegadeth
Copy link

siddmegadeth commented May 27, 2019

I am getting accessToken on front End. however when i send the accessToken using POST to server i am not able to validate the accessToken and retrieve profile information. I get the accessToken
but cannot make it work in back end (NodeJS)

Code On Front End :
// Authenticate For Cordov ased FB Login Only.
//There is a Web Based Login Also For Other Device



log = console.log.bind(console);
app.provider('facebookAuth', [function() {

    var uri;
    return {

        config: function(options) {
            uri = options;
            log(uri);
        },
        $get: ['$http', function($http) {

            return {
                login: function(accessToken, cb) {

                    warn("Access Token :");
                    log(accessToken);
                    $http({
                        method: 'POST',
                        url: uri.facebookCordova,
                        params: { accessToken: accessToken }
                    }).then(function(resp) {
                        cb(resp);
                    });
                }
            }
        }]



    }
}])

On The Backend using NODEJS

log = console.log.bind(console);
//cordova Bsed Auth with AccessToken
    app.post('/auth/facebook/cordova', function(req, res) {

        log("/auth/cordova/facebook");
        var fields = ['id', 'email', 'first_name', 'last_name', 'link', 'name'];
        var graphApiUrl = 'https://graph.facebook.com/v2.5/me?fields=' + fields.join(',');

        var accessToken = req.body.accessToken || req.query.accessToken || req.param["accessToken"];
        log("Access Token :");
        log(accessToken);
        // Step 2. Retrieve profile information about the current user.
        request.get({ url: graphApiUrl, qs: accessToken, json: true }, function(err, response, profile) {
            if (err) {
                return res.status(401).send({ message: err });
            }

            // See if User Exist Or Not Else Create A New User
            UserProfileModel.findOne({ profile: profile.id }, function(err, existUser) {

                log("After Query User :");
                log(existUser);
                if (err) {
                    res.send({ message: 'Some Error Occured', token: undefined });
                }

                if (existUser) {
                    log("Existing User :");
                    // Update record and chnage flag values
                    log(existUser);
                    var token = createJWT(existUser);

                    res.send({ message: 'Existing User', profile: existUser, token: token, status: true });
                } else {

                    log("New User Found :");
                    log(profile);
                    var user = new UserProfileModel();
                    user.profile = profile.id || profile.userID;
                    user.picture = 'https://graph.facebook.com/' + profile.id + '/picture?type=large';
                    user.fullName = profile.name;
                    user.email = profile.email;
                    user.isNewProfile = true;
                    user.isProfileCompleted = false;
                    log(user);
                    user.save(function(errSave, saved) {

                        if (errSave) {
                            res.status(401).send({ message: 'Duplicates Found', token: undefined, error: errSave, status: false });
                        }

                        log("User Saved Successfully :");
                        var token = createJWT(user);
                        res.send({ token: token, profile: user, status: true });

                    });
                }
            });
        });
    });

Please suggest what i am doing wrong here. I am trying to use AccessToken here to fetch Profile details and then save it to MongoDB is the user is new or return the profile details if exisiting user exist.

Thanks
Siddharth

@siddmegadeth siddmegadeth changed the title Not Able to Validate Server Side Login Using AccessToken Not Able to Validate Server Side Login Using AccessToken and Fetch Profile Information May 27, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant