check for extended permissions with new facebook javascript sdk

前端 未结 6 670
傲寒
傲寒 2020-12-23 00:07

is there a way to check in my application (canvas) if the user has extended permission (for example \"stream.publish\")?

i only can find a solution for the old sdk.<

相关标签:
6条回答
  • 2020-12-23 00:15

    The responses here that use FB.Data.query are to be avoided as this point, as Facebook has deprecated FB.Data.query entirely. The FB.api(/me/permissions ...) solution seems best.

    0 讨论(0)
  • 2020-12-23 00:19

    Generalized choise's function,

    function check_permissions (permissions, uid, cb) {
      FB.Data
        .query('select {0} from permissions where uid={1}', permissions, uid)
        .wait(function (res) {
          if (!res || res.length < 1) return cb(false);
          var row = res[0];
          var aperm = permissions.split(',');
          for (var i = 0; i < aperm.length; i++) {
            if (row[aperm[i]] != 1) return cb(false);
          }
          return cb(true);
      });
    }
    

    Calls the callback with true if the user has all of the permissions, otherwise calls the callback with false.

    0 讨论(0)
  • 2020-12-23 00:20
    FB.ui({
        method: 'permissions.request',
        perms: 'user_website',
        display: 'popup'
        },function(response) {
            alert(response.toSource());
            if (response && response.perms) {
                alert('Permissions granted: '+response.perms);
            } else if (!response.perms){
                alert('User did not authorize permission(s).');
            }
    });
    
    0 讨论(0)
  • 2020-12-23 00:28

    Update at the end of 2011:

    FB.api('/me/permissions', function (response) {
        console.log(response);
    } );
    

    console output:

    {
        data: [
            {
                create_note: 1,
                installed: 1,
                photo_upload: 1,
                publish_stream: 1,
                share_item: 1,
                status_update: 1,
                video_upload: 1,
            }
        ]
    }
    
    0 讨论(0)
  • 2020-12-23 00:30

    this solution is deprecated at the end of 2011, please use the answer that is marked as accepted above

    found a solution myself

    function check_ext_perm(session,callback) {
        var query = FB.Data.query('select publish_stream,read_stream from permissions where uid={0}', session["uid"]);
        query.wait(function(rows) {
            if(rows[0].publish_stream == 1 && rows[0].read_stream == 1) {
                callback(true);
            } else {
                callback(false);
            }
        });
    };
    

    this will check for publish_streamand read_stream

    example use:

    check_ext_perm(response.session, function(isworking) {
       if(isworking) {
          // post something to wall
       } else {
          // ask for login
       }
    });
    
    0 讨论(0)
  • 2020-12-23 00:33

    You can also get permissions back from FB.login:

    FB.login(function(response) {
      // handle the response
    }, {
      scope: 'publish_actions', 
      return_scopes: true
    });
    

    See https://developers.facebook.com/docs/reference/javascript/FB.login/v2.1#options

    0 讨论(0)
提交回复
热议问题