PHPプログラムに関する各種メモ書き

codeigniterでTwitterログインを実現する

● codeigniterでTwitter,Facebookログインを実現する

● Twitter APIキーを発行する

こちらからAPIキーを発行します(追加方法は割愛します。) https://apps.twitter.com/

● Twiter Oauthモジュールのインストール

composerからインストールします。
CodeIgniterで利用する場合は application ディレクトリに移動してから次のコマンドを実行します。
ターミナルから以下を実行

composer require abraham/twitteroauth

PHPから以下のように読み込みます

require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

または codeigniter の codeigniter/application/config/config.php の下記項目を TRUE にします。

$config['composer_autoload'] = TRUE;

● codeigniterのコントローラ「Oauth.php」の作成

codeigniterの controllers に Oauth.php を以下のように作成します
codeigniter/application/controllers/Oauth.php

<?php
defined('BASEPATH') or exit('No direct script access allowed');

use Abraham\TwitterOAuth\TwitterOAuth;

class Oauth extends CI_Controller
{

    public function __construct(){
        parent::__construct();
        $this->load->library('session');
        $this->load->helper('url');

        define('CONSUMER_KEY', 'XXXXX');
        define('CONSUMER_SECRET', 'YYYYY');
        define('OAUTH_CALLBACK', 'http://zzz.zzz.zzz/oauth/twitter_callback');
    }

    public function twitter()
    {
        $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
        $request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));
        $this->session->set_userdata('oauth_token', $request_token['oauth_token']);
        $this->session->set_userdata('oauth_token_secret', $request_token['oauth_token_secret']);
        $url = $connection->url('oauth/authenticate', array('oauth_token' => $request_token['oauth_token']));
        redirect($url);
    }

    public function twitter_callback()
    {
        $session = $this->session->userdata();
        $q = $this->input->get(null, true);
        $request_token = array();
        $request_token['oauth_token'] = $session['oauth_token'];
        $request_token['oauth_token_secret'] = $session['oauth_token_secret'];
        if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) {
            die('Error!');
        }
        $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
        $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $q['oauth_verifier']));
        $this->session->set_userdata('access_token', $access_token);
        session_regenerate_id();
        redirect('mypage');
    }

}

● ログインの実行

http://zzz.zzz.zzz/oauth/twitter/ へアクセスします
Twitterのサイトで認証が終わると http://zzz.zzz.zzz/oauth/twitter_callback/ へ戻ってきます。
アクセストークンを セッション変数 $_SESSION['access_token'] に保存した後、
http://zzz.zzz.zzz/mypage/ へリダイレクトします。


● codeigniterのコントローラ「Mypage.php」の作成

codeigniterの controllers に Mypage.php を以下のように作成します
codeigniter/application/controllers/Mypage.php

<?php
defined('BASEPATH') or exit('No direct script access allowed');

use Abraham\TwitterOAuth\TwitterOAuth;

class Mypage extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library('session');
        $this->load->helper('url');
        define('CONSUMER_KEY', 'XXXXXXXXXXXXXXX');
        define('CONSUMER_SECRET', 'YYYYYYYYYYYYYYYYYYYY');
    }

    public function index()
    {
        //twitter認証
        $consumerKey       = CONSUMER_KEY;
        $consumerSecret    = CONSUMER_SECRET;
        $accessToken       = $_SESSION['access_token']['oauth_token'];
        $accessTokenSecret = $_SESSION['access_token']['oauth_token_secret'];

        //TwitterOAuth認証
        // require_once 'twitteroauth/twitterOAuth.php';
        $connection  = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

        // ・自身の情報取得
        $account_settings = $connection->get("account/settings");
		print_r( $account_settings );
    }
}

  
参考リンク :
https://twitteroauth.com/    
https://developer.twitter.com/en/docs/api-reference-index    
https://syncer.jp/Web/API/Twitter/REST_API/  



関連エントリー

No.1087
02/27 16:31

edit

CodeIgniter
Twitter