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 選びの大きなアドバンテージになると思います。
以上です。