SNSでのログイン3 – コントローラーとビューの準備

投稿者: | 2018年6月21日

前回の投稿と内容が前後します。
各SNSでログインするコードを書く前に、共通部分のコードを書いておきます。

前提条件

  • 言語はPHPで、バージョンは 5.6 を想定
  • フレームワークに CodeIgniter 3 を使用

参考URL

何度も書くようですが、PHP のフレームワークに CodeIgniter を使用しています。
そのための準備として、コントローラーの骨格と、ビューを作成しておきます。何のことか分からない、必要ないという方は読み飛ばしてください。

CodeIgniterについて

コントローラーについて

すべてのログインのコントールを、Login コントローラーで行います。各 SNS のログイン処理の基本部分は、このコントローラーに追加していきます。
CodeIgniter のコントローラーについて軽く説明しておきます。

CodeIginter のコントローラーはクラスとして作成します。たとえば、Login クラスを作成したら、http://example.com/login でアクセスできます(サイトのURLベースが http://example.com の場合)。またこのとき、Login クラスの index メソッドが実行されます。Login クラスに index メソッドがないときはエラーになります。
index メソッド以外のメソッドを実行するには、http://example.com/login/do_something のようにします。この場合、Login クラスの do_something メソッドが実行されます。

ビューについて

ビューの中身は通常 HTML です。必要に応じて(素の PHP でもやるように)、PHP や JavaScript を入れることもできます。次のようにしてビューファイルを読み込んで、ブラウザーに表示できます。

$this->load->view('ビュー名', [ビューに渡すデータの連想配列]);

配列で渡したデータはビューで展開されます。たとえば、['data' => 'データ', 'other' => 'その他のデータ'] という連想配列を渡すと、ビューでは$data$otherの2つの変数に展開されます。

多用している 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 文字の文字列を返してくれるからで、他意はありません。推測されにくいランダムな英数字の文字列であることが重要です。

Loginコントローラーの作成

Loginコントローラーの骨格は以下のようになります。

Login.php

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

/**
 * ログインコントローラー
 */
class Login extends CI_Controller
{
    /**
     * コンストラクタ
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * インデックスページを表示する
     */
    public function index()
    {
        // 押されたボタンによってログインの処理を分岐
        switch ($this->input->post('submit')) {
            case 'line':
                break;

            case 'yahoo':
                break;

            case 'twitter':
                break;

            case 'instagram':
                break;

            case 'facebook':
                break;

            case 'google':
                break;
        }

        // ボタンが押されていない = 初めて表示したときはログインページのビューを表示する
        
        // エラーメッセージなどをセッションに入れる予定なので、セッションにデータがあれば読み込んでビューに渡す
        $message = '';

        if (isset($_SESSION['message'])) {
            $message = $_SESSION['message'];
            // セッションから読み取ったあと、セッションのデータは消しておく
            unset($_SESSION['message']);
        }

        // ビューに渡す配列
        $viewdata = [
            'message' => $message,
        ];

        // ここで指定している 'login' はコントローラーではなく、ビュー
        $this->load->view('login', $viewdata);
    }
}

ログインページのビューの作成

ログインページのビューは以下のようにします。

LINEでのログインについて
LINEでログインする場合、ブラウザーに表示するログインボタンの色やサイズ、語句などが細かく規定されています。実際に公開するWebサイトへLINEログインを組み込む場合、規定をよく確認して、それに従ってください。
ここで説明している方法は、ローカル環境で学習のために実装してみることを想定しています。そのため、見た目については考慮していません。

login.php (※この login.php はビューです。コントローラーの Login.php とは別です。)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>ログインテスト</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>

<?php if (!empty($message)): ?>
    <?=$message;?>
<?php endif;?>

<?=form_open('login');?> <!-- <form action="http://example.com/login" method="POST"> と同じ意味です-->
    <ul>
        <li><button type="submit" name="submit" value="line">LINEでログイン</button></li>
        <li><button type="submit" name="submit" value="yahoo">Yahooでログイン</button></li>
        <li><button type="submit" name="submit" value="facebook">facebookでログイン</button></li>
        <li><button type="submit" name="submit" value="twitter">twitterでログイン</button></li>
        <li><button type="submit" name="submit" value="instagram">Instagramでログイン</button></li>
        <li><button type="submit" name="submit" value="google">Googleでログイン</button></li>
    </ul>
</form>

</body>

</html>

ここで使用している $message 変数は、コントローラーから渡されたデータです。この$message変数にはエラーメッセージなどを渡す予定です。

ログイン後のページのビューの作成

ログインが成功した場合、以下のビューを表示します。

logined.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>ログインテスト</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>

<p><?=$message;?></p>
<p><?php var_dump($data);?></p>


<a href="<?=site_url('login')?>">ログインページへ戻る</a>  <!--site_urlはWebサイトのURLを返す関数 http://example.com/login が返ってくる-->

</body>

</html>

以上で共通コードの準備ができました。

ADs
  

コメントを残す

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

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