laravel11がリリースされていたので久しぶりにプロジェクト作成するところからやってみる
laravel11のプロジェクトを作成する
composer create-project laravel/laravel sample-laravel
10系がインストールされてね?
cd sample-laravel
php artisan -v
Laravel Framework 10.48.4
うん。10系だね。
あれ?
オーケー
まだ慌てるような時間じゃない
ちゃんと指定してあげよう
composer create-project laravel/laravel sample-laravel --prefer-dist "11.*"
ほう?
PHPのバージョンとな
(あれPHP8.2にしてなかったっけ。。。)
php -v
PHP 8.1.27
うん。ちゃんとバージョンを確認してから作業しましょう。
↑
これ大事。思い込みはだいぶ罠。
laravel11のPHPバージョンは8.2、8.3なので、せっかくだから、PHPも新しいのを使ってやろう
macなのでbrewを利用してインストールする
brew install php
php 8.3.4がインストールされたっぽい
brew link php
Linking /usr/local/Cellar/php/8.3.4... 24 symlinks created
php -v
PHP 8.1.27
??
brew unlink php@8.1
brew link php
Linking /usr/local/Cellar/php/8.3.4... 24 symlinks created
php -v
PHP 8.1.27
???
brew list | grep php
あるよね。。。
じゃあ8.2を指定してみる
brew unlink php
brew link --force --overwrite php@8.2
If you need to have this software first in your PATH instead consider running:
echo 'export PATH 〜〜〜
〜〜〜
パスね
echo 'export PATH="/usr/local/opt/php@8.2/bin:$PATH"' >> /Users/xxx/.bash_profile
echo 'export PATH="/usr/local/opt/php@8.2/sbin:$PATH"' >> /Users/xxx/.bash_profile
source ~/.bash_profile
php -v
PHP 8.2.17
ふむふむ
8.2にはできると
brew unlink php@8.2
brew link --force --overwrite php
Linking /usr/local/Cellar/php/8.3.4... 24 symlinks created
php -v
PHP 8.2.17
おk
きっとパスね
which php
/usr/local/opt/php@8.2/bin/php
8.2になっているから
echo 'export PATH="/usr/local/opt/php/bin:$PATH"' >> /Users/xxx/.bash_profile
echo 'export PATH="/usr/local/opt/php/sbin:$PATH"' >> /Users/xxx/.bash_profile
source ~/.bash_profile
php -v
PHP 8.3.4
ようやく!
brew link phpの時に
If you need to have this software first in your PATH instead consider running:
echo 'export PATH 〜〜〜
って出てくれたらよかったのに(なぜ最初にパス確認を思いつかなかった。。。)
これで
composer create-project laravel/laravel sample-laravel
を実行したらlaravel 11で作成されるはず!
よしよし
??
マイグレーション流れた?
??
preparing database??
前からこんなの実行されてたっけ??
composer create-project laravel/laravel sample-laravel10 --prefer-dist "10.*"
うん。実行されてないね。
じゃあ11からなんだ
.env
あるね
じゃあ
sqlite3 database/database.sqlite
で入って
.tables
へー
できてる
.exitで抜けて
php artisan serve
で起動して画面表示
どうせならログイン機能までやってみる
今回はLaravel Breezeを使ってみる
https://readouble.com/laravel/11.x/ja/starter-kits.html
このあたりを参考にインストールする
今回はbladeを選択する
composer require laravel/breeze --dev
php artisan breeze:install
希望するフロントエンドスタックとテストフレームワークの入力を求めらるので、今回はbladeを選択する
Which Breeze stack would you like to install?
Blade with Alpine
他にも
Would you like dark mode support?
と
Which testing framework do you prefer?
と聞かれたが好みで!
インストールが終わったら起動した画面を再読み込みしてみる
右上にLoginとRegisterが出てくる
Registerを押すと登録画面が出るので入力して登録する
dashboardが表示されるので、登録されたデータを確認してみる
sqlite3 database/database.slite
select * from users;
ちゃんとデータができている
今度は画面上でログアウトしてログインしてみる
dashboardの右上からログアウトして、Log in を押す
さっき登録したメールアドレスとパスワードを入力してログイン
ログインしてdashboardが表示される
この登録、ログインはどの辺でやっているかというと
routes/auth.phpを見てみる
Route::get('register', [RegisteredUserController::class, 'create'])
->name('register');
Route::post('register', [RegisteredUserController::class, 'store']);
Route::get('login', [AuthenticatedSessionController::class, 'create'])
->name('login');
Route::post('login', [AuthenticatedSessionController::class, 'store']);
とあり、このgetとpostで行われている
ちなみにLaravel Breezeでは、よくある連続してパスワードを間違った時のロック機能はデフォルトで設定されている
デフォルトでは5回間違うと60秒間隔をあけなければいけない
App\Http\Controllers\Auth\AuthenticatedSessionController.php
public function store(LoginRequest $request): RedirectResponse
{
$request->authenticate();
$request->session()->regenerate();
return redirect()->intended(route('dashboard', absolute: false));
}
このauthenticate()をみると
App\Http\Requests\Auth\LoginRequest.php
public function authenticate(): void
{
$this->ensureIsNotRateLimited();
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}
public function ensureIsNotRateLimited(): void
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
return;
}
event(new Lockout($this));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
この
RateLimiter::tooManyAttempts($this->throttleKey(), 5)
の「5」が試行回数なので「3」に変えれば3回間違ったらロックがかかる
ロック時間は、
App\Http\Requests\Auth\LoginRequest.php
public function authenticate(): void
{
〜
の
RateLimiter::hit($this->throttleKey());
の部分で第二引数に秒で指定してあげればよい
例えば
RateLimiter::hit($this->throttleKey(), 300);
とすると、300秒ロックがかかるようになる
私としては、5回もパスワードを間違うんだから、もうパスワードリセットさせればいいと思う
以上!終わり!