>백엔드 개발 >PHP 튜토리얼 >Facebook Connect를 사용하여 사용자 인증

Facebook Connect를 사용하여 사용자 인증

WBOY
WBOY원래의
2023-08-29 13:41:011275검색

최근 등록 게으름에 대한 논란이 많습니다. 사용자가 생각할 필요가 적을수록 전환율이 높아진다는 것이 입증되었습니다! 정말 좋은 생각이에요! 모두가 Facebook 프로필을 갖고 있는 것 같다면 원클릭 사용자 등록을 추가해 보는 것은 어떨까요? 오늘은 그 방법을 보여드리겠습니다.


1단계. 설정

MySQL 테이블

먼저 데이터베이스 테이블을 만들어 보겠습니다.

으아악

매우 간단합니다. ID, 사용자 이름, 성과 이름, 사용자 사진의 URL, 등록 날짜가 포함된 사용자 정보 테이블을 설정하겠습니다. 또한 다양한 타사 개방형 인증 프로토콜과 해당 식별자를 구별하기 위해 oauth_provideroauth_uid 필드를 추가했습니다. 예를 들어, 다음 주에 Twitter 사용자에게 가입을 요청하는 것이 좋을 것이라고 생각한다고 가정해 보겠습니다. 간단합니다. oauth제공자에 다른 값을 설정하고 oauthuid 값이 중복되지 않도록 하세요.

페이스북 앱

새 애플리케이션을 만드는 것부터 시작해 보겠습니다. 이름을 지정하고 이용 약관에 동의합니다. 다음으로 아래와 같이 기본 탭에서 API KeySecret을 가져옵니다.

使用 Facebook Connect 验证用户身份

캔버스 탭에서 캔버스 URL사후 승인 리디렉션 URL을 로컬 호스트로 설정하고 스크립트가 처리할 경로를 설정합니다. 이는 http ://localhost.com/login_facebook.php?。注意末尾的问号和域;两者都是 Facebook 所要求的。只需将您的 hosts 파일을 유효한 도메인 이름으로 설정하는 것과 유사합니다.

使用 Facebook Connect 验证用户身份

연결 탭에서 연결 URL을 기본 도메인과 동일한 값 및 localhost.com(또는 사용 중인 모든 항목)으로 설정합니다.

使用 Facebook Connect 验证用户身份

이제 저장하고 클라이언트 라이브러리를 다운로드한 후 srcdir中的facebook.php루트 디렉터리에 생성된 새 디렉터리에 압축을 풉니다.


2단계. 콜백

신원 확인 절차는 세 단계로 구분됩니다.

  1. 로컬 스크립트는 사용자 권한을 요청하는 URL을 생성합니다
  2. Facebook은 GET 매개변수를 사용하여 지정된 캔버스 URL을 반환합니다
  3. 세션 인증을 위한 매개변수 가져오기

회원가입 및 로그인 전 간단한 테스트를 해보겠습니다.

으아악

이제 http://localhost.com/login_facebook.php를 방문하여 어떤 일이 일어나는지 살펴보겠습니다. Facebook으로 리디렉션되어 권한을 요청했다면 올바른 방향으로 가고 있는 것입니다.

使用 Facebook Connect 验证用户身份

그러나 두 가지 문제가 있을 수 있습니다. 첫 번째: Facebook으로 리디렉션되었지만 오류가 표시되는 경우 구성에 누락된 값이 있을 수 있습니다. 애플리케이션 설정으로 돌아가서 "연결" 및 "캔버스" 탭을 확인하고 위에서 언급한 대로 해당 필드가 올바른지 확인하세요.

"Uncaught CurlException: 60: SSL 인증서 문제입니다. CA 인증서가 올바른지 확인하세요."와 같은 오류가 표시되는 또 다른 문제가 있을 수 있습니다. 이는 CURL 설정 때문에 발생합니다. facebook.php를 열고 makeRequest() 메서드를 찾은 다음 함수 내에서 다음 줄을 찾아야 합니다.

으아악

다음을 추가하여 팔로우하세요:

으아악

저는 라이브러리 해킹을 싫어하지만 아직 다른 방법을 찾지 못했습니다. 자, 사용자 등록으로 넘어가겠습니다. URL의 GET 매개변수에 이전 세션 키가 있으면 스크립트가 끔찍한 오류와 함께 종료되므로 try/catch 문도 추가했습니다.


3단계. 등록 및 신원 확인

다음에는 MySQL을 사용해 보겠습니다. 코드를 가능한 한 짧게 하고 작업을 완료하기를 원하므로 데이터 클리너를 구현하지 않을 것입니다. 이것을 기억하세요: 항상 데이터를 정리하세요.

먼저 데이터베이스에 연결해 보겠습니다.

으아악

이제 세션이 있을 경우를 대비해 $session 조건을 처리해 보겠습니다.

으아악

참고로 저는 facebook 作为 oauth_provider;如果您想接受其他 OAuth 提供商(如 twitter、Google 帐户、Open ID 等)和 oauth_uid을 찾기 위해 데이터베이스를 쿼리하고 있습니다. 이는 공급자가 사용자 계정에 대해 제공한 식별자이므로 일반적으로 좋은 생각입니다.

oauth_provider 字段保留为 text 필드 유형을 사용하면 성능이 저하될 수 있습니다. 따라서 가장 좋은 옵션은 ENUM 유형으로 설정하는 것입니다.

이제 데이터베이스에서 쿼리된 값을 포함하는 $result var가 생겼습니다. 다음으로 몇 가지 세션을 추가해 보겠습니다. 스크립트 시작 부분에 이 줄을 추가하세요.

으아악

empty($result) 조건 뒤에 다음을 추가하세요.

if(!empty($user)){
    # ...

    if(empty($result)){
        # ...
    }

    # let's set session values
    $_SESSION['id'] = $result['id'];
    $_SESSION['oauth_uid'] = $result['oauth_uid'];
    $_SESSION['oauth_provider'] = $result['oauth_provider'];
    $_SESSION['username'] = $result['username'];
}

由于对已登录的用户进行身份验证没有什么意义,因此在 session_start() 行下方添加:

if(!empty($_SESSION)){
    header("Location: home.php");
}

在需要身份验证的脚本中,只需添加:

session_start();
if(!empty($_SESSION)){
    header("Location: login_facebook.php");
}

如果您想显示用户名,请将其作为数组访问。

echo 'Welcome ' . $_SESSION['username'];
# or..
echo 'Welcome ' . !empty($_SESSION) ? $_SESSION['username'] : 'guest';

第 4 步:其他方法

Facebook 拥有大量连接功能,但我发现以下四个最有用。

旧方法

我可能遗漏了一些东西,但 FQL 似乎比 Graph API 更灵活、更简单。幸运的是,Facebook 仍然允许开发人员使用它,尽管使用新库,它已经发生了一些变化。

如果您想要用户 ID、名字、姓氏、用户图片的平方缩略图、可用的最大用户图片以及他或她的性别,您可以使用 users.getInfo 方法。

    $uid = $facebook->getUser();
    $api_call = array(
        'method' => 'users.getinfo',
        'uids' => $uid,
        'fields' => 'uid, first_name, last_name, pic_square, pic_big, sex'
    );
    $users_getinfo = $facebook->api($api_call);

您可以检查 Users.getInfo 可用字段的完整列表。

使用 FQL 可以获得相同的结果。

    $uid = $facebook->getUser();
    $fql_query  =   array(
        'method' => 'fql.query',
        'query' => 'SELECT uid, first_name, last_name, pic_square, pic_big, sex FROM user WHERE uid = ' . $uid
    );
    $fql_info = $facebook->api($fql_query);

以下是可使用 FQL 访问的表的列表,以及表用户可用的字段。

扩展权限

Facebook 为应用程序提供与用户数据的某些交互 - 只要获得授权即可。在旧的 API 中,额外权限的授权仅适用于 Javascript SDK(尽管我不太确定)。借助新的 API,我们可以轻松地将用户重定向到 Facebook 中的授权对话框,并在访问被授予或拒绝后返回到我们的网站。

在以下示例中,我们将重定向用户以授权帖子状态更新、照片、视频和注释、用户的真实电子邮件地址、生日以及对照片和视频的访问权限。

$uid = $facebook->getUser();

# req_perms is a comma separated list of the permissions needed
$url = $facebook->getLoginUrl(array(
    'req_perms' => 'email,user_birthday,status_update,publish_stream,user_photos,user_videos'
));
header("Location: {$url} ");

这是权限的完整列表。请注意,您可以指定用户接受时要定向到的 url 以及用户拒绝时要重定向到的 url。这些数组元素的键分别是 nextcancel_url。这是一个简单的示例:

$url = $facebook->getLoginUrl(array(
    'req_perms' => 'email',
    'next' => 'http://localhost.com/thanks.php',
    'cancel_url' => 'http://localhost.com/sorry.php'
));

如果未指定,则默认为请求脚本的位置。

使用 Facebook Connect 验证用户身份

检查扩展权限

由于用户可以轻松撤销权限,因此应用程序应始终在使用之前检查是否授予给定权限,特别是在发布某些内容时。我们将不得不使用旧版 API,因为新 API 似乎尚未完全实现它。

    $uid = $facebook->getUser();

    # users.hasAppPermission
    $api_call = array(
        'method' => 'users.hasAppPermission',
        'uid' => $uid,
        'ext_perm' => 'publish_stream'
    );
    $users_hasapppermission = $facebook->api($api_call);
    print_r($users_hasapppermission);

ext_perm 将仅支持旧的可用权限列表。

发布到墙上

验证用户是否具有 publish_stream 权限后,让我们在墙上发布一些内容。

    # let's check if the user has granted access to posting in the wall
    $api_call = array(
        'method' => 'users.hasAppPermission',
        'uid' => $uid,
        'ext_perm' => 'publish_stream'
    );
    $can_post = $facebook->api($api_call);
    if($can_post){
        # post it!
        $facebook->api('/'.$uid.'/feed', 'post', array('message' => 'Saying hello from my Facebook app!'));
        echo 'Posted!';
    } else {
        die('Permissions required!');
    }

本质上,我们使用 POST 方法(第二个参数)和一个数组作为要发送的数据的第三个参数,对 /<user_id>/feed</user_id> 进行 API 调用。在这种情况下,第三个参数支持 messagelinkpicturecaptionnamedescription。代码如下:

$facebook->api('/'.$uid.'/feed', 'post', array(
    'message' => 'The message',
    'name' => 'The name',
    'description' => 'The description',
    'caption' => 'The caption',
    'picture' => 'http://i.imgur.com/yx3q2.png',
    'link' => 'https://code.tutsplus.com
));

这是它的发布方式。

使用 Facebook Connect 验证用户身份

您应该了解的一些其他信息:

用户只需在他或她的墙上点击两次即可轻松撤销权限。您应该大量测试如果用户撤销对网站正常运行至关重要的一项或多项权限,或者即使应用程序被完全删除,可能会发生什么情况。这很重要。

  • 在“应用程序设置”中,您可以通过点击右侧的 x 来完全删除该应用程序。
  • 您可以在“授予的附加权限”部分中单独删除权限。

5。结论

虽然 Facebook 的身份验证功能确实很有用,但由于现在有很多人使用 Facebook,因此不建议将其用作网站中唯一的身份验证方法。那些没有 F​​acebook 帐户的人怎么办?他们不允许访问您的应用程序吗?感谢您的阅读!

위 내용은 Facebook Connect를 사용하여 사용자 인증의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.