概要
不正ログイン防止の一環として、cakePHP4でログイン時にユーザーにメールを送信する方法について解説します。
前提環境
- Hosting Server: さくらインターネット
- PHP: 7.4.9
- cakePHP: 4.1.1
コードのポイント
- ログイン時の処理なので、UsersControllerのloginメソッドのログイン成功したあと、の箇所に記載します。
- cakePHP4ではMailerクラスを使用するので、UsersControllerのnamespaneの後に「use Cake\Mailer\Mailer;」を記載してください。
※詳しくはcakePHP4のマニュアルのMailerの項を参照してください。
サンプルコード
UsersController
<?php
namespace App\Controller;
use Cake\Mailer\Mailer; // Mailerを使用する宣言を追加
class UsersController extends AppController
{
public function login()
{
$this->request->allowMethod(['get', 'post']);
$result = $this->Authentication->getResult();
if ($result->isValid()) {
// ログイン成功時にメール送信処理を行います。
// Authenticationを使ってusersテーブルのユーザー情報を取得
$user = $this->Authentication->getIdentity();
$mailer = new Mailer('default');
$mailer->setEmailFormat('html')
->setFrom([FROM_MAIL => FROM_MAIL_NAME]) // Fromのメールアドレス等はconfig/bootstrap.phpで定数宣言しています。
->setTo($user->email)
->setSubject('ログインのお知らせ')
->viewBuilder()
->setTemplate('login') // templates/email/html/login.php
->setLayout('default') // templates/layout/email/html/default.php
->setVar('username', $user->username); // usersテーブルに追加したusernameカラムの情報をテンプレートに適用
$mailer->deliver();
$redirect = $this->request->getQuery('redirect', [
'controller' => 'Pages',
'action' => 'home',
]);
return $this->redirect($redirect);
}
// 認証失敗した場合は、エラーを表示します
if ($this->request->is('post') && !$result->isValid()) {
$this->Flash->error(__('メールアドレスパまたはパスワードに誤りがあります。'));
}
}
// 以下省略