Laravel投稿サイト構築.87 -パスワード再設定メール調整/書き込みIP記録/通信制限-
前回はパスワードを忘れた際の画面のデザイン調整、日本語化を行った。
目次
パスワードリセット用メールの文言を日本語化
メール文言の日本語化は一度やっているが復習。
-----
vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php
上のテンプレートを編集。
英語を日本語にする場合は該当する文言を以下のファイルに追記。
-----
lang\jp.json
書き込んだユーザのIPアドレスを記録
不正防止のため、書き込みを行ったユーザのIPアドレスを保存したい。
threadsテーブル、repliesテーブルに user_ip項目を追加する。
いいね機能のlikesテーブルには初期で持っていた項目。
migration
-----
php artisan make:migration add_user_ip_to_threads --table=threads
php artisan make:migration add_user_ip_to_replies --table=replies
-----
public function up()
{
Schema::table('threads', function (Blueprint $table) {
$table->string('user_ip');
});
}
-----
model
protected $fillable = [
'category',
'user_identifier',
'message_title',
'message',
'user_id',
'link_url',
'user_ip',
];
-----
Controller
-----
public function store(Request $request){
$user_ip = $_SERVER['REMOTE_ADDR'];
if( array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER ) ){
$user_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
$form['user_ip'] = $user_ip;
}
連続アクセスの抑制
連続アクセスやDDoS対策のために連続アクセスを制限する。
-----
app\Providers\RouteServiceProvider.php
// ↓は一分間に10回までのアクセスを許可
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(10)->by($request->user()?->id ?: $request->ip());
});
}
-----
見た目には何も変化がなく地味な対応。
今回は以上。
次回はいよいよ音声機能を実装していきたい。
続く