• Home
  • Craft CMS
  • Craft CMS の setPasswordPath の設定の意味を誤解していた、でも仕様を変更してくれた件

Craft CMS の setPasswordPath の設定の意味を誤解していた、でも仕様を変更してくれた件

Craft CMS でパスワードのリセットフォームを実装していて、URL をオリジナルのものに変更したいと思いました。

そこで、general.php に下記の設定を加えました。

'setPasswordPath' => 'member/set-password',

これで https://example.com/member/set-password にアクセスすると、自分で実装したパスワードを再設定するページが現れます。しかし、システムから飛ばされるパスワード再設定のメールのリンクは、https://example.com/actions/users/set-password?code=foo&id=barとなっていました。

あれ、これバグじゃない?ってことで、本家の Issue に投げてみました。

setPasswordPath doesn't work properly · Issue #4925 · craftcms/cms

仕様通り

そして、Pixel & Tonic のボスのブランドンさんから、これは仕様どおりなんだよ、とのコメントが。

つまり、setPasswordPath は、https://example.com/actions/users/set-passwordのページで表示されるテンプレートのパスを指定するもので、URL を変えるものではないよ、と。

なるほど、ということで上記の設定をテンプレートのパスを指定するように変更したらhttps://example.com/actions/users/set-passwordで独自の画面が表示されるようになりました。

でもブランドンさんも、他の〜Pathの設定は確かに URL を設定するものだから、これじゃおかしいよねと。。。

仕様変更

その後、ブランドンさんから、仕様を変更して、バージョン 3.4 から他の〜Pathの設定と同じように URL として動くようにしたよ、とのことで、分かりやすい仕様に変更してくれました!つまり、v3.4からは、

'setPasswordPath' => 'member/set-password',

をセットしたら、https://example.com/member/set-password がパスワード変更の URL になります。

同様の動作で、verifyEmailPath という設定も追加してくれました。

とりあえずの対応

さて、今構築中のサイトでは、上記のように設定の扱いが変わるので、変更後の動作を想定して、

'setPasswordPath' => 'member/set-password',

と設定しておいて、.htaccess に下記のように設定してリダイレクトさせておくのが良いかもしれません。

RewriteEngine On

RewriteRule ^actions/users/set-password /member/set-password?%{QUERY_STRING} [L,R=301]

実はこの記事を「Craft CMS の setPasswordPath の設定の意味を誤解していた件」というタイトルで下書きしておいたのですが、朝起きてみたら本家が修正を取り込んでくれていました。

Craft CMS のこの開発陣のスピードと対応は、いつも好印象で、CMS 選びの大きなアドバンテージになると思います。

以上です。