現在:公開中
Laravelのログインを使いこなす
概要
Laravel5.5で使用できるログインスロットルの仕様を追う
とりあえずコメントの翻訳
<?php
namespace Illuminate\Foundation\Auth;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Cache\RateLimiter;
use Illuminate\Auth\Events\Lockout;
use Illuminate\Support\Facades\Lang;
use Illuminate\Validation\ValidationException;
trait ThrottlesLogins
{
/**
* Determine if the user has too many failed login attempts.
*ユーザーがログイン試行に失敗した回数が多すぎるかどうかを判断する。
*
* @param \Illuminate\Http\Request $request
* @return bool
*/
protected function hasTooManyLoginAttempts(Request $request)
{
return $this->limiter()->tooManyAttempts(
$this->throttleKey($request), $this->maxAttempts(), $this->decayMinutes()
);
}
/**
* Increment the login attempts for the user.
*ユーザーのログイン試行を増やします。
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function incrementLoginAttempts(Request $request)
{
$this->limiter()->hit(
$this->throttleKey($request), $this->decayMinutes()
);
}
/**
* Redirect the user after determining they are locked out.
*ユーザーがロックアウトされたことを確認した後、ユーザーをリダイレクトします。
* @param \Illuminate\Http\Request $request
* @return void
* @throws \Illuminate\Validation\ValidationException
*/
protected function sendLockoutResponse(Request $request)
{
$seconds = $this->limiter()->availableIn(
$this->throttleKey($request)
);
throw ValidationException::withMessages([
$this->username() => [Lang::get('auth.throttle', ['seconds' => $seconds])],
])->status(423);
}
/**
* Clear the login locks for the given user credentials.
*指定されたユーザーの資格情報のログインロックをクリアします。
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function clearLoginAttempts(Request $request)
{
$this->limiter()->clear($this->throttleKey($request));
}
/**
* Fire an event when a lockout occurs.
*ロックアウトが発生したときにイベントを発生させます。
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function fireLockoutEvent(Request $request)
{
event(new Lockout($request));
}
/**
* Get the throttle key for the given request.
*リクエストのスロットルキーを取得します。
* @param \Illuminate\Http\Request $request
* @return string
*/
protected function throttleKey(Request $request)
{
return Str::lower($request->input($this->username())).'|'.$request->ip();
}
/**
* Get the rate limiter instance.
*レートリミッタのインスタンスを取得します。
* @return \Illuminate\Cache\RateLimiter
*/
protected function limiter()
{
return app(RateLimiter::class);
}
/**
* Get the maximum number of attempts to allow.
*許可する試行の最大回数を取得します。
* @return int
*/
public function maxAttempts()
{
return property_exists($this, 'maxAttempts') ? $this->maxAttempts : 5;
}
/**
* Get the number of minutes to throttle for.
*スロットルする分数を取得します。
* @return int
*/
public function decayMinutes()
{
return property_exists($this, 'decayMinutes') ? $this->decayMinutes : 1;
}
}
0
投稿者:通りがりすの人 / 投稿日:2018-09-18 10:20:11 / PV数:1948 / コメント数:0
コメント 0
コメント投稿