今からお前んちこいよ

多摩川沿いにて細々とお勉強。

【Sentinel + SQLite3】PHP7でお手軽ユーザ認証

Mysqlの替わりにSQLiteを使う。
ちょっとしたユーザ認証でMysqlをたてるのもなぁ… という思いがあってSQLiteを選んだが、実装するにあたり色々調べたのでまとめる。

Sentinelインストール

公式ドキュメントを参考に Composer とかで Sentinel と Illuminate を適宜入れる。
ここでは細かいことは触れない。

# composer.json
~~~ 略 ~~~
    "require": {
        "cartalyst/sentinel": "2.0.*", 
        "illuminate/database": "~5.1",
        "illuminate/events": "^5.2",
        "illuminate/http": "~5.0"
    },
~~~ 略 ~~~
$ php composer.phar install

DB接続先の設定

公式ドキュメント: https://cartalyst.com/manual/sentinel/2.0#configuration
を元に設定をSQLiteに変える。

// Import the necessary classes
use Cartalyst\Sentinel\Native\Facades\Sentinel;
use Illuminate\Database\Capsule\Manager as Capsule;

// Include the composer autoload file
require 'vendor/autoload.php';

// Setup a new Eloquent Capsule instance
$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'sqlite',
    'database'  => '/path/to/database.sqlite',
    'charset'   => 'utf8'
]);

$capsule->bootEloquent();

“driver” を “sqlite” にして、 “database” にはsqliteファイルのフルパスを書く。

ユーザ認証用テーブルの作成

他のフレームワークでMysqlならばmigrationがあるので、自動で必要なテーブルが生成できるが、SQLiteでは手動でテーブルを作る。
Mysql用のSchema: sentinel/mysql.sql at 2.0 · cartalyst/sentinel · GitHub
を元に、SQLite用に作成して実行。

認証機能の動作を確認

公式ドキュメントの通り関数を実行して動作することを確認する

// Register a new user
Sentinel::register([
    'email'    => 'test@example.com',
    'password' => 'foobar',
]);


// Authenticate
$credentials = [
    'email'    => 'test@example.com',
    'password' => 'foobar',
];

echo Sentinel::authenticate($credentials);

Mac + phpenv で php7.1.9 を入れる

Mac OS (Sierra/10.12.3)

phpenv

brewで入らなかったので手動。

# 配置
$ cd
$ git clone https://github.com/CHH/phpenv.git
$ cd phpenv/bin
$ ./phpenv-install.sh
# ---> $HOME/.phpenv が出来上がる

# お掃除
$ cd 
$ rm -rf phpenv

パスを通す。

$ echo 'export PATH="$HOME/.phpenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(phpenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ phpenv versions
* system (set by /Users/XXXX/.phpenv/version)

phpenv install 7.1.9

ビルドするために php-build を phpenv に入れる。

$ git clone https://github.com/CHH/php-build.git ~/.phpenv/plugins/php-build

インストール可能バージョン一覧。

$ phpenv install --list
Available versions:
  5.2.17
  5.3.10
  5.3.11
~~~ 略 ~~~
  7.1.9

今回は 7.1.9 を入れる。

$ phpenv install 7.1.9

~~~ 略 ~~~

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 2.3, min: 204, excluded: ).
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: OpenSSL version 1.0.1 or greater required.
-----------------------------------------

もろもろパッケージが足りなくてエラーがでるので、
brewでインストールする。

$ brew install gcc re2c libmcrypt autoconf automake libiconv bison openssl libxml2 jpeg libpng
$ brew link --force bison
$ brew link --force openssl
$ brew link --force libxml2

再度 php7.1.9 をインストール。

$ phpenv install 7.1.9
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 7.1.9 into /Users/XXXX/.phpenv/versions/7.1.9
[Skipping]: Already downloaded and extracted https://secure.php.net/distributions/php-7.1.9.tar.bz2
[Preparing]: /var/tmp/php-build/source/7.1.9
[Compiling]: /var/tmp/php-build/source/7.1.9
[Success]: Built 7.1.9 successfully.

成功したっぽい

$ phpenv versions
* system (set by /Users/XXXX/.phpenv/version)
  7.1.9
$ phpenv global 7.1.9
$ php -v
PHP 7.1.9 (cli) (built: Sep 16 2017 15:51:12) ( NTS )

windows + cygwin で pyenv の環境構築

Linux, Mac ではコマンドだけで全て済むが、 Windowsの場合Cygwin上だと python-build が動かない。 なのでその部分($ pyenv install X.X.X - 指定バージョンのPythonをpyenvに配置)に関しては手動で行う。

pyenvの配置

Githubからリポジトリを落としてPATHを通すだけ。

# Cygwin上で
$ cd  
$ git clone https://github.com/pyenv/pyenv.git .pyenv     
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> .profile  
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> .profile  
$ echo -e 'eval "$(pyenv init -)"' >> .profile  
$ source .profile
$ pyenv versions
* system (set by /home/XXXXXXXXX/.python-version)

以下のエラーがでることがある。

/path/to/.pyenv/bin/pyenv: line 1: ../libexec/pyenv: No such file or directory

シンボリックリンクを貼るのに失敗しているのが原因。
貼り直してあげる。

$ cd
$ touch /bin/readlink  
$ rm -rf ~/.pyenv/bin/pyenv   
$ ln -s ~/.pyenv/libexec/pyenv ~/.pyenv/bin/pyenv  

再度動作を確認してみる。

$ pyenv versions
* system (set by /home/XXXXXXXXX/.python-version)

pyenv install X.X.X

python-build が使えれば $ pyenv install X.X.X でおわるのだが、
cygwinには手動で配置する以外方法が見当たらなかった。

2系

公式のインストーラから、インストールパスを指定して配置する。

Windows x86-64 MSI installer
https://www.python.org/downloads/release/python-2712/

インストール先を /path/to/.pyenv/versions/2.7.12 とし、実行。
指定のバージョンが指定の場所に配置されているか確認。
おそらくシンボリックリンクは貼られていないので、手動で貼る。

$ cd .pyenv/versions/2.7.12
$ mkdir bin && cd bin
$ ln -s ../python.exe python

動作を確認。

$ cd
$ pyenv local 2.7.12
$ pyenv versions
  system
* 2.7.12 (set by /home/XXXXXXXXX/.python-version)
$ python -V
Python 2.7.12

3系

2系と同様にインストーラを実行することも可能だが、
別の方法もある。
3系では embeddable file が配布されており、解凍して指定の場所に置くだけでも可。

Windows x86-64 embeddable zip file  
https://www.python.org/downloads/release/python-362/

解凍したフォルダを /path/to/.pyenv/versions/3.6.2 に移動。
おそらくシンボリックリンクは貼られていないので、手動で貼る。

$ cd .pyenv/versions
$ mv /path/to/python-3.6.2-embed-amd64 3.6.2
$ mkdir 3.6.2/bin && cd 3.6.2/bin
$ ln -s ../python.exe python

動作を確認。

$ cd
$ pyenv local 3.6.2
$ pyenv versions
  system
  2.7.12
* 3.6.2 (set by /home/XXXXXXXXX/.python-version)
$ python -V
Python 3.6.2

 

これで Windows + Cygwin で python環境を柔軟に使える。