如何从Facebook授权用户获取user_friends列表?

时间:2015-06-09 12:59:04

标签: php facebook laravel facebook-friends laravel-socialite

我正在研究在用户授权应用程序查看他的user_friends之后查看某个用户的朋友列表的可能性,但我没有完全掌握这个想法,所以我很想知道,有没有直接的方法查看列表,而无需通过图形API和东西? 我正在使用Laravel的Socialite包登录,它似乎工作得非常好,并返回默认信息(电子邮件,姓名,头像等)以及其他允许的事项,如出生日期,地点和家乡。但是,我发现很难查看照片,帖子,朋友和群组等列表。即使用户允许我这样做。

提前多多感谢!

3 个答案:

答案 0 :(得分:3)

你无法做到。

Facebook不允许您获取朋友列表,但只会列出已经在使用您的应用的朋友列表。在API的官方文档中,我们可以阅读:https://developers.facebook.com/docs/graph-api/reference/v2.3/user/friends

  

这只会返回任何使用(通过Facebook登录)应用程序的朋友发出请求。如果该人的朋友拒绝了user_friends权限,该朋友将不会出现在此人的朋友列表中。

更多的是,你无法从Laravel获得使用Socialite的朋友列表,所以我建议你使用另一个Laravel包,比如这个:https://github.com/SammyK/LaravelFacebookSdk

干杯!

答案 1 :(得分:1)

以上所有信息仍然正确,但您可以通过将其添加到控制器中的'字段和范围来获取好友列表以及更多社交名称...

E.G:

$socialUser = Socialite::driver('facebook')->fields(['id', 'email', 'cover', 'name', 'first_name', 'last_name', 'age_range', 'link', 'gender', 'locale', 'picture', 'timezone', 'updated_time', 'verified', 'birthday', 'friends', 'relationship_status', 'significant_other','context','taggable_friends'])->scopes(['email','user_birthday','user_friends','user_relationships','user_relationship_details'])->user();

答案 2 :(得分:0)

这个答案只是在扩展并解释了如何使用@jayenne所说的来完成这项工作。

在您的redirect()函数中,您将进行如下调用:

    public function redirect() {
        return Socialite::driver('facebook')
            ->fields([
                'friends'
            ])
            ->scopes([
                'user_friends'
            ])->redirect();
    }

上面,我们要求Socialite请求user_friends许可并将其存储到名为friends的字段中。现在,在回调中,您可以像这样在SocialiteUser中获得friends字段:

   public function callback(SocialFacebookAccountService $service) {
        $socialiteUser = Socialite::driver('facebook')
            ->fields(['friends'])
            ->user();

        //Loop through all the facebook friends returned (who are already on your site and friends with the recently registered user)
        foreach($socialiteUser->user['friends']['data'] as $fbFriend) {
            //do something with this facebook friend here
        }
        //Most tutorials log the user in like this; you define the $service and the method
        //You can find a tutorial in the Socialite docs/github repo
        $user = $service->createOrGetUser($socialiteUser);
        auth()->login($user);
        return redirect('/home');
   }