| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- namespace Illuminate\Foundation\Auth;
- use Illuminate\Auth\Events\Lockout;
- use Illuminate\Cache\RateLimiter;
- use Illuminate\Http\Request;
- use Illuminate\Http\Response;
- use Illuminate\Support\Str;
- 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()
- );
- }
- /**
- * 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() * 60
- );
- }
- /**
- * Redirect the user after determining they are locked out.
- *
- * @param \Illuminate\Http\Request $request
- * @return \Symfony\Component\HttpFoundation\Response
- *
- * @throws \Illuminate\Validation\ValidationException
- */
- protected function sendLockoutResponse(Request $request)
- {
- $seconds = $this->limiter()->availableIn(
- $this->throttleKey($request)
- );
- throw ValidationException::withMessages([
- $this->username() => [trans('auth.throttle', [
- 'seconds' => $seconds,
- 'minutes' => ceil($seconds / 60),
- ])],
- ])->status(Response::HTTP_TOO_MANY_REQUESTS);
- }
- /**
- * 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::transliterate(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;
- }
- }
|