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