2015/04/24

Facebook JavaScript Login

ไน‹ๅ‰ๆœ‰ๆๅˆฐ Facebook ไปฅๅŠ Google ไฝฟ็”จ PHP API ็™ปๅ…ฅ็š„ๅฏซๆณ•(ๆ—‹่ฝ‰้–€),ไปŠๅคฉไพ†่ฌ›ไธ€ไธ‹ Facebook JavaScript ็ซฏ็š„็”จๆณ•,JavaScript ็ซฏ็‚บไบบๆ‰€่ฉฌ็—…็š„ๅฎ‰ๅ…จๆ€งๅ•้กŒ,ๅฏไปฅไฝฟ็”จๅฆๅค–ไธ€ๅ€‹ PHP ๅ‘ผๅซ Facebook Graph Tool ็š„ๆ–นๅผๅŽปๅ–ๅพ—ๅ€ผ,ไธ‹้ขไพ†็คบ็ฏ„ไฝœๆณ•。

HTML
<input type="hidden" name="appId" id="appId" value="<?php echo $appId; ?>">

ๆˆ‘ไธๅ–œๆญกๆŠŠ PHP ็ตๆžœๅฏซๅœจ JavaScript ่ฃก้ข,ๆ‰€ไปฅๅœจ html ้ ้ขๆ”พไธ€ๅ€‹ JavaScript ๅŽปๆŠ“ๅ€ผ。

JavaScript
function facebookLogin() {
    FB.login(function(response) {
        if (response.authResponse) {
            FB.getLoginStatus(function(res) {
                if (res.status === 'connected') {
                    accessToken = res.authResponse.accessToken;

                    $.get('next.php', {accessToken: accessToken}, function() {
                        // Do something
                    })
                }
            });
        }
    });
}

window.fbAsyncInit = function() {
    FB.init({
        appId: $('#appId').val(),
        version: 'v2.3',
        status: true, cookie: true,
        xfbml: true
    });
 
    facebookLogin();
};

(function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "//connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
} (document, 'script', 'facebook-jssdk'));

้€™ๆฎต code ๆœƒ่‡ชๅ‹•่งธ็™ผ facebookLogin function,ๅฆ‚ๆžœๆƒณ่ฆๆŒ‰ๆŒ‰้ˆ•่งธ็™ผ็š„่ฉฑ,ๅฐฑๆ˜ฏ็งป้™ค window.fbAsyncInit ไธ‹็š„ facebookLogin(),็„ถๅพŒๆŠŠไป– bind ๅˆฐๆŸๅ€‹ไบ‹ไปถไธŠ。

PHP
<?php

$accessToken = $_GET['accessToken'];
$graphUrl = "https://graph.facebook.com/me?access_token=" . $accessToken;
$data = json_decode(file_get_contents($graphUrl));

echo '<pre>'; var_dump($data); echo '</pre>';

PHP ้ ้ขๆŽฅๅˆฐๅ€ผๅพŒ,ๅฏไปฅๅˆฉ็”จ้€™ๅ€‹ access token ๅŽป่ทŸ graph api ๆ‹ฟ่ณ‡ๆ–™,ๅฏไปฅๆดปๅคšไน…ๆˆ‘ๆฒ’่จ˜,ๅ› ็‚บ็…ง็†่ชช้€™ไบ›ไบ‹ๆƒ…ๆ‡‰่ฉฒ่ฆๅœจ็žฌ้–“่™•่ฃกๅฎŒๆˆ,้€้Ž้€™ๆจฃ็š„ๆ–นๅผๅฐฑไธ็”จๅฎณๆ€•ๅฐๆ–นๆ””ๆˆชไธฆไฟฎๆ”นไฝ  JavaScript ็š„็ตๆžœไบ†。

2015/04/20

Facebook And Google Login Upgrade

้€™ๆฌก Faceook ่ฆๅฎš 4/30 ่ฆๅ‡็ดšๅˆฐๆฏ”่ผƒๆ–ฐ็š„ๅฅ—ไปถ,Google ๅ‰‡ๆ˜ฏ 4/20 ไปฅๅพŒ่ฆ็ฆๆญขไฝฟ็”จ openid 2.0 ็™ปๅ…ฅ,ๅˆ—ไธ€ไธ‹ PHP ็ซฏ่ฃฝไฝœ็š„็ญ†่จ˜。

Facebook

้ฆ–ๅ…ˆไฝ ่ฆไธ‹่ผ‰ Facebook PHP ็š„ SDK,ๅฎ‰่ฃๆ–นๆณ•ๆœ‰ composer ๆˆ–็›ดๆŽฅไธ‹่ผ‰,PHP ็‰ˆๆœฌ้œ€ๆฑ‚็‚บ 5.4+。

Composer
{
  "require" : {
    "facebook/php-sdk-v4" : "4.0.*"
  }
}
GitHub

https://github.com/facebookarchive/facebook-php-sdk

PHP Code
<?php

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;

$id = 'YOUR CLIENT ID';
$secret = 'YOUR SECRET';
$url = 'RETURN URL';

// Pemission scope, type is array
// reference url: https://developers.facebook.com/docs/facebook-login/permissions/v2.3
$permissions = 'YOUR PERMISSIONS SCOPE';

FacebookSession::setDefaultApplication($id, $secret);
$helper = new FacebookRedirectLoginHelper($url);

try {
    if(isset($_SESSION['access_token']) === true) {
        $session = new FacebookSession($_SESSION['access_token']);
    } else {
        $session = $helper->getSessionFromRedirect();
    }
} catch(FacebookRequestException $ex) {
    // When Facebook returns an error
    $ex->getMessage();
} catch(\Exception $ex) {
    // When validation fails or other local issues
    $ex->getMessage();
}

if ($session) {
    $_SESSION['access_token'] = $session->getToken();

    // Get all scope id
    $request = (new FacebookRequest($session, 'GET', '/me/ids_for_business'))->execute();
    $idGroup = (array)$request->getGraphObject()->getProperty('data')->asArray();

    // Get user info
    $request = (new FacebookRequest($session, 'GET', '/me'))->execute();
    $user = $request->getGraphObject()->asArray();
} else {
    // Echo login url
    echo $helper->getLoginUrl($permissions);
}

Google

ๅฎ‰่ฃๆ–นๆณ•ไธ€ๆจฃๆœ‰ๅ…ฉ็จฎ,composer ่ทŸ github,PHP ่ฆๆฑ‚็‚บ 5.2+。

Composer
"require": {
  "google/apiclient": "1.0.*@beta"
}
GitHub

https://github.com/google/google-api-php-client

PHP Code
<?php

$id = 'YOUR CLIENT ID';
$secret = 'YOUR SECRET';
$url = 'RETURN URL';

$client = new Google_Client();
$client->setClientId($id);
$client->setClientSecret($secret);
$client->setRedirectUri($url);
$client->setScopes(
    array(
        'https://www.googleapis.com/auth/userinfo.email',
        'https://www.googleapis.com/auth/userinfo.profile',
    )
);
$service = new Google_Service_Oauth2($client);

if (isset($_GET['code']) === true) {
    $client->authenticate($_GET['code']);
    $_SESSION['access_token'] = $client->getAccessToken();

    header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}

if (isset($_SESSION['access_token']) === true) {
    $client->setAccessToken($_SESSION['access_token']);
}

if ($client->getAccessToken()) {
    // User info
    $me = $service->userinfo->get();
} else {
    $authUrl = $client->createAuthUrl();

    // Login url
    echo $authUrl;
}