Facebook第三方登陆

本文默认您可以正常访问facebook官网,并且已经注册facebook应用。

facebook登陆功能,验证方式是Oauth2.0,这样第三方应用不需要知道用户的账号密码,就可以获得用户在facebook上的注册信息。官方提供了SDK PHP v5,十分强大,可以调用官方的各种API。

1.PHP v5文档PHP SDKSDK的使用方法文档介绍很详细,这里不做赘述,需要理解命名空间,并且成功加载autoload.php,之后就可以很轻松的调用里面的方法了。

2.登陆功能实现(基于Oauth2.0认证):具体流程是,
》》用户点击facebook登陆按钮;
这里写图片描述
》》本地服务器请求facebook服务器;
》》facebook返回重定向跳转到facebook登陆页;
这里写图片描述
》》用户输入用户名密码,点击提交,请求facebook服务器;
》》facebook进行用户名密码验证,成功则携带access_token信息重定向到开发者指定的路径上(不如网站首页,可以使用获得的access_token来获取用户信息);
这里写图片描述

Oauth认证
这里写图片描述

OAuth2.0

》》附上官方文档facebook login

3.贴出部分代码(使用的是PHP V5)
本人用的是TP框架,phpv5包放在vendor目录下

<?php
namespace Home\Controller;
use Think\Controller;


class FacebookController extends Controller{
    public function __construct()
    {
        parent::__construct();
        require_once VENDOR_PATH.'Facebook/'.'autoload.php';  //自动加载函数很重要
    }

    //登录按钮
    public function index()
    {
        //echo VENDOR_PATH;
        $fb = new \Facebook\Facebook([
                'app_id' =>'YOUR APP ID',
                'app_secret' =>'YOUR APP SECRET',
                'default_graph_version' => 'v2.5',
        ]);

        //返回的是helper对象
        $helper = $fb->getRedirectLoginHelper();
        //希望获得的用户权限,用户在登陆时可以选择权限
        $permissions = ['email', 'user_likes']; // optional
        //这里的地址是用户登陆成功后的跳转地址,需要在你的app管理中心设置一下,下面有详解
        $loginUrl = $helper->getLoginUrl('http://127.0.0.1/Twsearch/index.php/Home/Facebook/get_access', $permissions);

        echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
    }

    public function get_access($code)
    {
        $fb = new \Facebook\Facebook([
                    'app_id' =>'YOUR APP ID',
                    'app_secret' =>'YOUR APP SECRET',
                    'default_graph_version' => 'v2.5',]
                                    );
        $helper = $fb->getRedirectLoginHelper();
        try 
        {
          $accessToken = $helper->getAccessToken();
        } 
        catch(\Facebook\Exceptions\FacebookResponseException $e) 
        {
          // When Graph returns an error
          echo 'Graph returned an error: ' . $e->getMessage();
          exit;
        } 
        catch(\Facebook\Exceptions\FacebookSDKException $e) 
        {
          // When validation fails or other local issues
          echo 'Facebook SDK returned an error: ' . $e->getMessage();
          exit;
        }

        if (isset($accessToken)) 
        {
          // Logged in 获得access_token并保存到session里!
          $_SESSION['facebook_access_token'] = (string) $accessToken;
echo $accessToken;

          // Now you can redirect to another page and use the
          // access token from $_SESSION['facebook_access_token']
        }
    }

}

3.需要注意的两点
3.1跳转路径需要在APP管理中心设置APP高级设置

这里写图片描述

这里的地址要跟代码里的地址匹配

3.2如果您使用翻墙访问facebook那本地服务器通过curl来访问facebook是就需要加上代理设置
这里写图片描述

两个标记一个是添加代理,另一个是跳过证书验证。

发布了20 篇原创文章 · 获赞 4 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Csw_PHPer/article/details/51145913