Member 12737957 Ответов: 1

Ошибка входа в Facebook на веб-сайте


Недавно я разместил регистрацию и вход в систему с помощью facebook на своем сайте, который работает, но у меня есть одна проблема. Когда я меняю имя, фотографию и т. д. В своем профиле на сайте и выхожу из системы, как только я снова вхожу в систему, изменения не обновляются. Я думаю, что правильный подход здесь заключается в том, чтобы проверить, зарегистрировался ли пользователь уже с адресом электронной почты, который совпадает с его социальным адресом электронной почты, и если у него есть и его имя/фотография профиля установлены, то мы не обновляем его имя/фотографию профиля. Я не знаю, как это сделать.

(function($, document, window) {
var hello = window.hello;

var makeApiRequest = window.makeApiRequest;

var SocialAuth;

'use strict';

// only proceed if hello.js has already been referenced
if (typeof window.hello === 'undefined') {
    return;
}


/**
 * Lib for making Facebook and Google OAuth API calls.
 * @type {Object}
 */
SocialAuth = {

    /**
     * Initialize the social login APIs.
     */
    init: function() {

        // initialize hello.js
        hello.init({
            facebook: '1684686755117990',
            google: '617421937193-dbfsdngr0j1i3g10ecdum7ugjf92t6r6.apps.googleusercontent.com'
        }, {
            'redirect_uri': '',
            scope: 'basic, email, friends'
        });
    },


    /**
     * Registers a new user or logs in an existing user.
     * @param  {string}   provider - Must be either 'facebook' or 'google' (required)
     * @param  {Function} callback - Called after the login request is completed
     */
    login: function(provider, callback) {
        var self = this;

        // if there is a valid token in localStorage, the user is already authenticated
        if (this.isLoggedIn()) {
            typeof callback === 'function' && callback(true);
            return;
        }

        // first authenticate with the provider
        hello(provider)
            .login()
            .then(function() {
                var authToken, data;
                if (provider == 'facebook') {
                    authToken = JSON.parse(localStorage.hello).facebook['access_token'];
                    data = {
                        'token': authToken, 'provider': 'facebook'
                    };
                }
                else if (provider == 'google') {
                    authToken = JSON.parse(localStorage.hello).google['access_token'];
                    data = {
                        'token': authToken, 'provider': 'google'
                    };
                }

                // after that make the login api request to own site
                makeApiRequest('auth/oauth', data, 'POST')
                    .success(function(response) {
                        self.setLoginToken(true);
                        self.setAccountType(provider);
                        typeof callback === 'function' && callback(true);
                    })
                    .error(function() {
                        typeof callback === 'function' && callback(false);
                    });
            }, function() {
                typeof callback === 'function' && callback(false);
            });
    },


    /**
     * Logs the current user out.
     * @param  {Function} callback - Called after the user is logged out
     */
    logout: function(callback) {
        hello.logout()
             .then(callback);
    },


    /**
     * Checks if the user is logged in with a valid token.
     * @returns {Boolean} - is true when user is logged in
     */
    isLoggedIn: function() {
        return !!localStorage.ProjectToken;
    },


    /**
     * Gets the login token from localStorage.
     * @returns {string} - the login token
     */
    getLoginToken: function() {
        return localStorage.ProjectToken;
    },


    /**
     * Sets the login token in localStorage.
     * @param {string} token - the login token provided by the API (required)
     */
    setLoginToken: function(token) {
        localStorage.Project = token;
    },


    /**
     * Sets the account type in localStorage.
     * @param {string} type - possible values 'google' and 'facebook'
     */
    setAccountType: function(type) {
        localStorage.accountType = type;
    },


    /**
     * Retrieves some user data from the provider's API & stores it in the DB.
     * @param {string} provider - Either 'google' or 'facebook' (required)
     */
    getUserData: function(provider) {
        var data;
        hello(provider)
            .api('me')
            .then(function(json) {
                data = {};
                data.email = json.email;
                data['first_name'] = json['first_name'];
                data['family_name'] = json['last_name'];

                if (provider == 'facebook') {
                    data.avatar = json.picture + '?width=200&height=200';
                }
                else if (provider == 'google') {
                    data.avatar = json.picture.split('?')[0] + '?sz=200';
                }

                makeApiRequest('users/me', data, 'PATCH', true);
            });
    }
};

SocialAuth.init();

window.SocialAuth = SocialAuth;
}(jQuery, document, window));


Что я уже пробовал:

Я не знаю, как заставить его работать

1 Ответов

Рейтинг:
2

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

У вас может быть флаг, чтобы определить, обновил ли пользователь поля из Facebook или нет.


Member 12737957

Но как внести изменения в код, чтобы IFS обновился, а не копировал информацию из facebook?

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Вам нужно проверить этот флаг. Если флаг истинен, то не копируйте снова, потому что вы уже скопировали.

Member 12737957

Не могли бы вы написать мне эту часть кода? И куда его девать?

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Вам нужно написать код. Просто напишите его там, где вы решаете получить от FACEBOOK. Иначе вам придется нанять меня. ;)