CentOS7+Apache+Ajax+PHP+PostgreSQLでインタラクティブなページづくり-10
こんにちは、ニックネーム たいちょう です。
第10日目ですね。
前回までは、https でトップページが出るように環境を整えたのでした。
ところで、ログイン画面が出てきていましたけど、これは私が作ったものです。
ここで、この画面で、ログイン名 パスワードに、admin admin と入れると、次の画面に飛ぶように作っています。
そして、ログアウトをクリックすると、元のログイン画面に戻ります。
たったこれだけですが、これは ZendSkeletonApplication-master の機能だけでは足りません。作り込みが必要になります。
何が必要でしょうか。
ZendSkeletonApplication-master は、MVC を利用しています。
私は、Model を PostgreSQL, View を htmlとjQuery, Control を PHP スクリプトとしました。
今、ログイン画面の話です。
ここで、ログインパ名、パスワードのハッシュ値をデータベースのテーブルに格納しています。
そして、https プロトコル経由で送られてきた値と照合して、合致すれば、オブジェクトを作成します。そのオブジェクトが存在していれば、ログイン画面に飛ばす、という仕組みです。
ログアウト時には、そのオブジェクトを破棄します。
そのオブジェクトが存在していなければ、ログイン画面に飛ばされます。
そのような仕組みになっています。
世の中に存在するログインスクリプトとは、このような仕組みです。
今日は、そこのところをZendSkeletonApplication-master でつくる、最初のところをやります。
作ったあとは、画面を便利に作り込んでいけば、それなりに便利になります。例えば、パスワードを変更するとか。
今は、そこまでは作り込んでいません。
ちなみに、パスワードはデータベーステーブルにそのまま格納してはいけません。
管理者自身も、パスワードを知ってはいけないからです。
さて、ZendSkeletonApplication-master では、どのような流れでプログラムを作成していけはいいのでしょうか。
apache の設定を思い出します。
# cat /etc/httpd/conf/httpd.conf | more
<IfModule dir_module>
#DirectoryIndex index.html
DirectoryIndex index.html index.php
</IfModule>
# cat /etc/httpd/conf.d/ssl.conf | more
# General setup for the virtual host,inherited from global configuration
#DocumentRoot "/var/www/html"
DocumentRoot /var/www/ZendSkeletonApplication-master/public
ServerName wwww.matsue-lab-test.co.jp:443
...
DocumentRoot を、
/var/www/ZendSkeletonApplication-master/public
にしていました。
じゃ、そこのところを確認します。
# cd /var/www/ZendSkeletonApplication-master/public
# ls
https://www.matsue-lab-test.co.jp
にアクセスすると、
/var/www/ZendSkeletonApplication-master/public/index.php
が読み込まれる、という算段です。
では、index.php を見てみます。
// Setup autoloading
require 'init_autoloader.php';
// Run the application!
Zend\Mvc\Application::init(require 'config/application.config.php')->run();
ここでは、ZendFramework を読み込んでいます。
そして、config/application.config.php で、モジュールを読み込んでいます。
ここで、モジュール名を、mlcdb とします。config/application.config.php の記述は次のようになります。
// This should be an array of module namespaces used in the application.
'modules' => array(
//'Application',
'mlcdb',
),
次に、読み込まれるのは、config/autoload/global.php 及び local.php です。
config/autoload/global.php に、データベース名を記述します。
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'pgsql:dbname=mlcdb;host=localhost',
),
...
config/autoload/loacl.php に、データベースのユーザ名を記述します。
'db' => array(
'username' => 'postgres',
'password' => '',
),
);
上記のように、データベースをPostgreSQL, データベース名を mlcdb としたので、
PostgreSQL上で実際にデータベース及びパスワードを格納するテーブルを作成しておきます。
# su - postgres
$ createdb mlcdb
$ psql mlcdb
mlcdb=# create table password(login_name varchar(32) primary key, password varchar(60) not null);
ここで、password カラムは、ぴったり60バイトで作ります。
生の値が入ることはありません。管理者もパスワードを知ってはいけないからです。
その仕組みは後でやります。今は、箱だけを作ります。
確認します。
mlcdb=# \d password
列 | 型 | 修飾語
-------------+----------------------+-------------
login_name |character varying(32) | not null
password |character varying(60) | not null
インデックス:
"password_pkey" PRIMARY KEY, btree (login_name)
できていますね。
mlcdb=# \q
さて、これから必要なファイル群を作成していきます。
完成すると、ログインすると次のような画面が出る様にします。
でも今日はここまでにしておきます。お疲れさまでした、第10日目の終了です。
ニックネーム たいちょう でした。
次回をお楽しみに。