Mojolicious::LiteでセッションストアにRedisを使ってIIJmioアプリを作る。

mio chang
mio chang

IIJmioのクーポンスイッチAPIを使用してアプリを作りました。APIの詳細は以下を参照してください。
サービス概要 – IIJmioクーポンスイッチAPI
作ったアプリ:mio chang Coupon Switcher

IIJmioクーポンスイッチAPIはOAuth2.0を使用しているのですが、MojoliciousのセッションはCookieで保持されていて、そのままだとサーバ側でセッションIDからstateを復元する仕組みが必要になるため、セッションストアにRedisを使うことにしました。
モジュールはMojoX::Session::Store::Redisを使用します。

Mojolicious::Lite側でのRedisの使用設定

plugin session => {
	stash_key => 'mojox-session',
	store	 => MojoX::Session::Store::Redis->new(
		{
			server  => '127.0.0.1:6379', #redisのポート番号。デフォルトは6379のはず。
			redis_prefix	=> 'mojo-session',
			redis_dbid	  => 0, #これは好みのIDで
		},
	),
};

セッション生成

my $self = shift;
my $session = $self->stash('mojox-session');
$session->load;
$session->create unless ($session->sid);

セッション情報書き込み・セッションの有効期限変更

expires_deltaとextend_expiresでハマりました。ペアで使わないとダメなんですね。

#値書き込み
$session->data( your_key => "value" );

#有効期限更新
$session->expires_delta(123456);
$session->extend_expires; #これを実行しないとデフォルト3600秒のままになる。expires_deltaの実行だけでいいと思っててハマりました。

セッション情報読み込み

my $sid = $session->sid; #session id
my $val = $session->data('your_key');

実際のスクリプトはgithubに載せておきます。
retrorocket/mio
Redis、使ってみたらものすごく勝手が良かったので積極的に使っていきたいです。

あと、UIにBootstrap Switchを使ってみたのですが、これもかなり良かったので今度紹介記事書きたいです。