アカウント管理ライブラリーphpUserClassの使い方と罠 | fieldWalking

アカウント管理ライブラリーphpUserClassの使い方と罠

あむちょです。

最近マイブームのPHPで、アカウントを管理するのに便利なライブラリーを使ってみました。

PR アプリ作ってます

今回使ったのは、アカウント作成からメールでの承認、ログインを簡単に作成できるphpUserClassというライブラリーです。

login

こっからダウンロードできます。phpUserClass-GitHub

中身は、

  • access.class.php -ライブラリー本体
  • example-jquery.php -jQueryを使ったログイン
  • example1.php -ログイン
  • example2.php -アカウント発行
  • example3.php -メール承認によるアカウント発行

っとなってます。

とても便利なライブラリーですが、最終更新が4年前と今のphpのバージョンだと非推奨なやり方だったり、エラーがたくさんあります。勉強がてらエラー直しつつ使ってみました。

データベースの用意

まずはアカウントデータを保存するデータベースの用意。

mySQLで適当なデータベースとユーザーとパスワードを作る。このブログのサーバーは、Xserverを使っており、サーバーパネル側で作りました。

次にテーブルの準備。

example2.phpに書いてあるコメントをmySQLでそのまま実行するだけす。

CREATE TABLE `users` (
  `userID` mediumint(8) unsigned NOT NULL auto_increment,
  `username` varchar(50) NOT NULL default '',
  `password` varchar(100) NOT NULL default '',
  `email` varchar(150) NOT NULL default '',
  `activationHash` varchar(150) NOT NULL default '',
  `active` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`userID`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`),
  KEY `active` (`active`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

次にaccess.class.phpに必要なデータベース情報を入力

43〜63行

<br />
private $dbName = &#8216;データベース名&#8217;;<br />
private $dbHost = &#8216;ホスト名&#8217;;<br />
private $dbUser = &#8216;ユーザー名&#8217;;<br />
private $dbPass = &#8216;パスワード&#8217;;<br />

これで準備は完了。サンプルが動かせると思いきや、たくさんのエラーでうまいこと動かない。

エラーをいくつかなおす

まずexample1〜3.php共通で1行目、<?を<?phpに変更。

次にaccess.class.php

190行

setcookie($this->remCookieName, '', time()-3600);

setcookie($this->remCookieName,'', time()-3600, '/', $this->remCookieDomain);

こいつのせいでcookieが削除できずログアウトできません。私が最初に使ったバージョンだと’/’のシングルクォーテーションの文字コードがちょっとおかしい’/’という罠もありました。

298行 if(!res)をif(!$res)に。

example1.php33行

<br />
&lt;a href=&quot;&lt;?php echo htmlspecialchars($_SERVER[&#8216;PHP_SELF&#8217;]); ?&gt;&#8217;?logout=1&quot;&gt;logout&lt;/a&gt;<br />


<br />
&lt;a href=&quot;&lt;?php echo htmlspecialchars($_SERVER[&#8216;PHP_SELF&#8217;]); ?&gt;?logout=1&quot;&gt;logout&lt;/a&gt;<br />

?logout=1の前にシングルクォーテーションが入ってるという地味な罠…

これで一通り動くはずです。

実際の使い方

まずはライブラリーを読み込んでインスタンス化

<br />
require_once &#8216;access.class.php&#8217;;<br />
$user = new flexibleAccess();<br />

これは各ページで必須のおまじない。次にログイン中かチェック

<br />
if ( $user-&gt;is_loaded() ){<br />
 //ログイン中<br />
}<br />
else{<br />
    header(&#8216;Location:ログインページurl&#8217;);<br />
}<br />

もしログインしていなければログインページへリダイレクト。exampe1.php、example-jquery.phpがそれにあたります。

アカウントがなければexample3.phpのようにアカウントを発行してもらう流れになると思います。

ユーザー名やIDを拾得する時は

<br />
if ( $user-&gt;is_loaded() ){<br />
    $id = $user-&gt;get_property(&#8216;userID&#8217;);<br />
    $name = $user-&gt;get_property(&#8216;username&#8217;);<br />
}<br />

でできます。

実際に動くサンプルをみせたいとこですが、これを使っているのがcometを使ったリアルタイム同期チャットでサーバーにすごく負担をかける。

chat

だからみせられないよ

コメント