, требующие расширенных разрешений с SDK JS, не обязательно используя fb.login ()

Я работаю над приложением Canvas, и я хочу выполнить следующее с помощью SDK JS:

  • Проверьте, если пользователь предоставил удельные расширенные разрешения

    • , если это так, позвоните некоторой функции StartSerProcess ()

    • Если нет, отобразить диалоговое окно AUTH, чтобы получить разрешения и предупреждение пользователя, если они не обеспечивают достаточный доступ.

Я хочу полностью обрабатывать это на стороне клиента, такой, что запускаемое устройство () никогда не вызывается, если пользователь не предоставляет правильные разрешения, учитывая, что сценарий сервера его выполняет, опирается на эти разрешения.

После поиска я нашел Это решение , но он исключительно использует fb.login (), который я не хочу звонить каждый раз, потому что если пользователь уже аутентифицируется, открывается раздражение диалоговое окно AUTH Затем автоматически закроется сразу после.

Мое начальное решение состоит в том, чтобы позвонить FB.getLoginstatus (), а затем сделайте графический вызов API на / me / permissions, если это возможно и только звоните в fb.login (), если я действительно должен показать диалоговое окно AUTH.

Вот код, который у меня есть на данный момент:

$('#my_ui_button').click(function() {
    require_perms(function(is_authenticated) {
        if(!is_authenticated) {
            startServerProcess();
        } else {
            alert('Sorry, we cannot start the server process until you grant permission');
        }
    });
});


function require_perms(callback) {
    // check if the user is logged in + connected to the app
    FB.getLoginStatus(function(response) {

        // if the user is logged in, continue to check permissions
        if(response.authResponse) {
            FB.api('/me/permissions', function(perms_response) {

                // if photo access already exists, we're good to go
                if(perms_response['data'][0]['user_photos'] && perms_response['data'][0]['friends_photos']) {
                    console.log('permissions are already granted.');
                    callback(true);

                    // photo access does not exist, so show an auth dialog
                } else {

                    // get photo permissions
                    console.log('requesting permission...');
                    FB.login(function(response) {
                        if(response.authResponse) {
                            console.log('permission granted');
                            callback(true);
                        } else {
                            console.log('permission request failed');
                            callback(false);
                        }
                    }, {
                        scope : 'user_photos,friends_photos'
                    });
                }
            });
            // user is not connected to the app, so show an auth dialog
        } else {

            // get photo permissions
            console.log('requesting permission...');
            FB.login(function(response) {
                if(response.authResponse) {
                    console.log('permission granted');
                    callback(true);
                } else {
                    console.log('permission request failed');
                    callback(false);
                }
            }, {
                scope : 'user_photos,friends_photos'
            });
        }
    });
}

, это кажется грязным способом решения проблемы? Мне особенно не нравится тот факт, что я повторяю этот код fb.login (), но я бежал в некоторые проблемы, устраняющие, что дано асинхронную природу вызова графика API (или, может быть, мне просто нужно больше сон).

Любые комментарии / консультации будут очень оценены. Спасибо.

15
задан dshap 13 September 2011 в 08:22
поделиться