SNSを使用したログイン – Twitter実装編 Part.2 (TwitterOAuth使用)

投稿者: | 2018年7月11日

注意
すでに Twitter実装編 Part.1 のコードが書かれていることを前提で説明しています。
メソッド名は実装編 Part.1 で使用したものと同じ名前になっているので、TwitterOAuthライブラリ未使用・使用を混在させるときは、メソッド名を変えるなどの処置を行ってください。

TwitterにPHPでログインする方法として、インターネットで公開されているライブラリを使用する方法があります。この中で、TwitterOAuth というライブラリを使用して実装してみます。
余談ではありますが、最初にこのライブラリを試したとき、コード32のエラーが発生してログインできませんでした。それでTwitterOAuthを使用しない方法のログインを試したのですが、これも同じエラーでログインできませんでした。いろいろと対処方法を試してもだめで諦めかけていたのですが、最後と思いTwitterOAuthを試したところ、今度はなぜかログインできるようになりました。
広く使われている(と思われる)ライブラリを使用しても、Twitterログインはうまくいかないこともあるということでしょう。

TwitterOAuthは下記リンク先から入手できます。
https://github.com/abraham/twitteroauth

各種情報

前提条件

  • 言語はPHPで、バージョンは 5.6 を想定
  • フレームワークに CodeIgniter 3 を使用
  • WebサイトのURLは、https://example.com と想定して説明します

参考URL

多用している CodeIgniter のコマンド

redirect(リダイレクト先, リダイレクトメソッド, HTTPレスポンスコード)

リダイレクト先へリダイレクトします。リダイレクト先に ‘login’ と指定していれば、Loginコントローラーのindexメソッドへリダイレクトします(http://example.com/login/index)。素のPHPであれば、header(‘Location: http://example.com/login/index’); のようになります。

$this->input->get_post('・・・')
$this->input->post('・・・')

$_GET$_POSTから値を取り出します。その値(項目)がないときは、null を返してくれます。get_post() は先に $_GET を調べて、値がなければ $_POST を調べてくれます。post()$_POSTだけを調べます。

$this->load->library('・・・')
$this->load->view('・・・')

ライブラリやビューとして作成した PHP ファイルをインクルードします。require_once '・・・' と同じ意味です。

random_string('md5')

ランダムな文字列を作成する関数です。'md5' を指定しているのはちょうど 32 文字の文字列を返してくれるからで、他意はありません。推測されにくいランダムな英数字の文字列であることが重要です。

TwitterOAuthのインストール

冒頭に記載したリンク先から、TwitterOAuthをダウンロードしてください。どこにインストールするかは環境によります。CodeIgniterの場合、application フォルダ直下に入れます。
TwitterOAuthの機能は、Twitter_libraryライブラリから呼び出します。Twitter_libraryライブラリの先頭で、TwitterOAuthをインクルードしておきます。
Twitter_library.php

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

// 以下の2行を追加
require_once APPPATH . 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

getAuthorizationUrlメソッドの修正(Twitter_libraryライブラリ)

認可コードを取得して、Twitterのログインページへリダイレクトするためメソッドです。TwitterOAuthを使用すると、以下のようになります。
Twitter_library.php

/**
 * 認証画面のURLを取得する(twitterOAuth版)
 * @return  string  認証URL
 */
public function getAuthorizationUrl()
{
    $connection = new TwitterOAuth($this->consumerKey, $this->consumerSecret);
    $response = $connection->oauth('oauth/request_token', ['oauth_callback' => $this->callbackUrl]);

    $url = $connection->url('oauth/authenticate', ['oauth_token' => $response['oauth_token']]);
    $_SESSION['auth'] = $response;

    if (empty($url)) {
        return $connection->getHeaders();
    } else {
        header('Location: ' . $url);
        exit;
    }
}

connectメソッドの修正(Twitter_libraryライブラリ)

アクセストークンをリクエストするメソッドです。以下のようになります。
Twitter_library.php

/**
 * アクセストークンのリクエスト(twitterOAuth版)
 * @param   array   $token          リクエストトークンの配列
 * @param   string  $oauthVerifier  認証確認識別子
 * @return  mixed   成功時:アクセストークンの配列 失敗時:false
 */
public function connect($token, $oauthVerifier)
{
    $connection = new TwitterOAuth($this->consumerKey, $this->consumerSecret, $token['oauth_token'], $token['oauth_token_secret']);
    $result = $connection->oauth('oauth/access_token', ['oauth_verifier' => $oauthVerifier]);

    if (empty($result)) {
        return false;
    } else {
        return $result;
    }
}

getUserInfoメソッドの修正(Twitter_libraryライブラリ)

ユーザー属性をリクエストするメソッドです。以下のようになります。
Twitter_library.php

/**
 * ユーザー属性を取得する(twitterOAuth版)
 * @param   array   $token  アクセストークンの配列
 * @return  object  ユーザー情報
 */
public function getUserInfo($token)
{
    $connection = new TwitterOAuth($this->consumerKey, $this->consumerSecret, $token['oauth_token'], $token['oauth_token_secret']);
    $result = $connection->get('account/verify_credentials');
    return $result;
}

以上となります。

ADs
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)