CakePHP4のAuthenticationで複数の認証

CakePHP4で、管理者向けの認証と一般ユーザー向けの認証を設置したい場合について・・・

管理画面は /admin 以下にあるとします(route.phpでprefixを設定しているとして)。

Application.php の getAuthenticationService で、urlが/adminで始まっているかどうかで処理を切り分けます。


if ( preg_match( '/^\/admin\/?/', $path ) ) {
〜〜〜
$service->loadAuthenticator('Authentication.Session', [
'sessionKey' => 'ManagementAuth', // 管理者認証に使用するセッションキー
] );
$service->loadIdentifier('Authentication.Password',
[
'fields' => $fields,
'resolver' => [
'className' => 'Authentication.Orm',
'userModel' => 'Adminusers',
],
]
);
〜〜〜
} else {
〜〜〜
$service->loadAuthenticator('Authentication.Session', [
'sessionKey' => 'MemberAuth', // 管理者認証とは別のセッションキーを設定
] );
$service->loadIdentifier('Authentication.Password',
[
'fields' => $fields,
'resolver' => [
'className' => 'Authentication.Orm',
'userModel' => 'Users',
],
]
);
〜〜〜
}

のようにすると、/admin 以下で動くコントローラーでは、Adminusers モデルを使用します。
それ以外のコントローラーでは、Users モデルを使って認証します。

もっとスマートな方法があるんだろうと思いますが、とりあえず、これでうまくいっています。

カテゴリー: Webコンテンツ | CakePHP4のAuthenticationで複数の認証 はコメントを受け付けていません

CakePHP4.2のDebug Kitでmissing routeが起きた場合の対処

以下、なんとなく…のお話です。

CakePHP4.2.xで

を使用している場合に、Debug Kitがmissing routeになって動かなくなりました。
で、たどり着いたのが、unauthenticatedRedirectやloginUrlの指定方法。
cookbookでは、

$service->setConfig(['unauthenticatedRedirect' => Router::url(['prefix' => false,'plugin' => null,'controller' => 'Users','action' => 'login',]),'queryParam' => 'redirect',]);

のように指定しています。
これを

$service->setConfig(['unauthenticatedRedirect' => '/users/login']),'queryParam' => 'redirect',]);

のように指定すると、Debug Kitのmissing routeが解消されました。

なんとなく…です。

カテゴリー: Webコンテンツ | CakePHP4.2のDebug Kitでmissing routeが起きた場合の対処 はコメントを受け付けていません

ubuntu18.04 → ubuntu20.04

お正月休みを使って、ubuntu18.04からubuntu20.04へのアップグレードを行ったので、その備忘録。
といってもredmineがひっかかっただけですが…

ubuntu18.04のパッケージは3.4だったので、redmine公式サイトから4.0をダウンロードして使っていました。
ubuntu20.04にアップグレードしたら、redmineが動いていません。
調べてみると、rubyのバージョンがあっていない。
redmine4はruby2.6までだそうですが、ubuntu20.04でインストールされるrubyは2.7です。

ということで、おおよそ以下のことを行いました。

  • ruby2.6をソースコードからビルド
  • /usr/bin/rubyのリンク先をruby2.6に変更
  • bundler、gem、passengerの再構築
  • apache2の/mods-available/passengerをオフにする
  • apache2のredmine設定ファイルにpassengerの設定を追記
  • assets/config/manifest.js を作成

最後のmanifest.jsはなんで必要になったのかがようわかりませんが…

===追記(2021.01.03)===
baserCMSも動きませんでした。MySQL8で引っかかります。

app/Config/database.php
のdefaultに、公式サイトを参考に、以下の内容を追加しました。

'settings' => array("sql_mode" => "'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'")

カテゴリー: Webコンテンツ, サーバーまわり | ubuntu18.04 → ubuntu20.04 はコメントを受け付けていません

mpcbridge ver 6.0

mpd(Music Player Daemon)のリモコンとして動作するWebアプリ、mpcbridge ver 6.0をリリースしました。

mpcbridgeの詳細は、こちらをご覧ください。

↓↓ダウンロードはこちら
https://mpcbridge.fourthgate.jp/files/download/mpcbridge.zip

以下の修正、変更を行っています。
1) CakePHPコアを4.1にアップデート
2) mpdのバージョンが0.21以降の場合、楽曲ファイルのフォーマット(サンプリングレート、量子化ビット数、チャンネル数)を表示します
3) mpdのバージョンが0.21以降の場合、フリーテワード検索の条件にハイレゾ/CDが選択できます
4) アーティスト情報を更新

ディレクトリからの選曲時、フリーワードでの検索時に、楽曲ファイルのサンプリングレート等が確認できるようになったので、ハイレゾフォーマットとCDフォーマットが混在している環境では、ちょっと便利になったのではないかと思います。

カテゴリー: PCオーディオ | mpcbridge ver 6.0 はコメントを受け付けていません

Ubuntu18のphp7.2

よくわからない現象に遭遇したので、備忘録代わりに…

さくらインターネットのVPS上で、Ubuntu18.04を使用しています。

もちろんPHPもインストールしているのですが、一部のphpスクリプトが動かないという現象に素遇しました。
apacheのログには、
[core:notice] [pid 14401] AH00052: child pid 15570 exit signal Aborted (6)
と出ています。

いろいろ試したのですが、
<?php phpinfo(); ?>
だけのphpファイルでも上記エラーが起きます。

手元(ローカル)のUbuntu18.04のPHPでは上記のようなことは起きていません。
ググってみて、それらしい記事を見つけられず…

藁にもすがるような気持ちで、phpだけをアンインストールして、再度インストールし直したら、なんと!治りました。

という、ちょっと気持ちの悪いお話でした。

カテゴリー: サーバーまわり | Ubuntu18のphp7.2 はコメントを受け付けていません

当社Webサイトについて

現在、当社のWebサイト(https://www.fourthgate.jp/)が閲覧できなくなっています。

VPSのOSをUbuntu18.04にアップデートした → PHPが7.2になった → Webサイトに使っていた BaserCMS 3 が動かなくなった

ということです。
ちょっと時間がないので、しばらくはこの状態です。

カテゴリー: 仕事 | 1件のコメント

Raspberry Pi 3 B+ に gitlab をインストールする

subversionを使っていますが、いい加減、gitに切り替えないとと思いつつ幾星霜…
ようやく重い腰を上げて、gitlab をインストールしてみようかと思い立ちました。
が、予想外に四苦八苦。

一つ目は、ラズパイの起動ディスク。
SDカードに全部突っ込むのはさすがにどうかと思い、USB-HDDからの起動とします。
mpd用のラズパイでは、USBストレージからいとも簡単に起動したので、すんなりいくだろうと思ったのですが…
システムが起動したりしなかったりします。どうやらHDDケースのせいのようです。
オートパワーオフなどの機能が入っているケースだとうまくないようです。
ずっと以前に買った、USB/IEEE1394兼用ケースにしたら、うまく起動するようになりました。

二つ目は、gitlabのメモリ使用量。
gitlabのデフォルトの設定のままだと、ラズパイではメモリ不足でスワップしまくって、かえって遅くなってしまうらしいです。
ということで、先人達の記事にあるとおり、postgresqlにアサインするバッファ容量を減らして対応しました。

ようやく、gitlabのスタートラインに建てました…
こんな遠回りしているから、イカンのですよね(笑)

カテゴリー: サーバーまわり | Raspberry Pi 3 B+ に gitlab をインストールする はコメントを受け付けていません

Ubuntu 18.04 LTSがインストールできない件

先日、Ubuntu 18.04.2をインストールしようとしたところ、以前の記事と同じく、途中でループしてインストールできないという症状が起きました。

ぐぐってみたところ、こんな記事にたどり着きました。
https://forums.ubuntulinux.jp/viewtopic.php?pid=119684
インストールの言語を日本語にすると、この現象に遭遇するようです。

ということで、言語を英語のままインストールを続行すると、すんなりインストールできました。
わかってしまえばなんと言うことないですが…

カテゴリー: サーバーまわり | Ubuntu 18.04 LTSがインストールできない件 はコメントを受け付けていません

Raspberry Piで温度計測(その2)

先日のラズパイ温度計、延々と温度計測を続けています。
一日の温度変化は、測定データを全て取得すればよいですでが、週間とか月間といった長いスパンになると、データをはしょったほうがよいです。
ということで、測定データの移動平均を取ってみようと思い立ちました。

色んなサイトを参考にさせて頂いて、なんとか実装することができました。
CakePHP3でのコードはこんな感じです。

$hm_data = $this->ondo_data->find( )
->join( [      .....(3)
'table' => 'temperature_histories',
'alias' => 'subtbl',
'type' => 'LEFT',
'conditions' => [
'TIMESTAMPDIFF(MINUTE, TemperatureHistories.measuring_datetime, subtbl.measuring_datetime) BETWEEN -35 AND 35',
'TemperatureHistories.sensor_id = subtbl.sensor_id',
],
] )
->select([
'dayhhmm' => "DATE_FORMAT(TemperatureHistories.measuring_datetime, '%d %H:%i')",
'hourAvg' => 'AVG(CAST(subtbl.temperature AS SIGNED))',      .....(5)
'measuring_datetime' => 'TemperatureHistories.measuring_datetime',
])
->where(function ($exp, $q) use ( $sdate, $edate ) {      .....(1)
return $exp->between( 'TemperatureHistories.measuring_datetime', $sdate, $edate );
})
->where( ['MINUTE(TemperatureHistories.measuring_datetime)' => '00', 'TemperatureHistories.sensor_id' => $sensor_id ] )      .....(2)
->group([ 'TemperatureHistories.measuring_datetime' ])      .....(4)
->order([ 'TemperatureHistories.measuring_datetime' => 'ASC' ])      .....(6)
->all();

temperature_histories はテーブル名。
temperature へ計測結果が入ります。
measuring_datetime は計測日時。
sensor_id は、温度センサーのIDです。

大ざっぱな解説は…
(1)集計期間は、$sdate と $edate の間です。
(2)データを取得するのは、$sensor_id 指定されるセンサー、時間は正時(00分)毎とします。
(3)subtblという別名で自分自身をjoinしますが、その際に、測定時間の前後35分間の測定値も取得します。
(4)joinしたテーブルからは複数のデータがくるので、TemperatureHistories.measuring_datetime でグループ化します。
(5)上記(3)でjoinしたsubtblから取得したデータの平均値を計算します。
(6)当たり前ですが、測定時間でソートします。

temperature を CAST しているのは、temperatureが数値型ではなく文字列型のためです。
最初に、あまり深く考えずに、文字列型にしてしまったので、こんなことになっています。
dayhhmm はグラフ化する時に横軸で使用するためです。

で、得られたデータをグラフ化したら、こんな感じになりました。

カテゴリー: Webコンテンツ | Raspberry Piで温度計測(その2) はコメントを受け付けていません

Let’s EncryptのTLS-SNI-01無効化

色々あって、Let’s EncryptはTLS-SNIを無効にしますよと、メールが届いていました。
当たり前ですが、放置するわけにもいかんので対応しました。

以下、備忘録代わりです。

といっても、
https://certbot.eff.org/
にアクセスして、Webサーバとディストリビューションを選ぶと、手順が表示されます。
それに従って実行するだけですが…

カテゴリー: サーバーまわり | Let’s EncryptのTLS-SNI-01無効化 はコメントを受け付けていません