使用 Laravel 8 和 Breeze 登录时检查用户是否处于“活动”状态

Stu*_*ter 4 php laravel laravel-breeze

我的用户表中有一个布尔列active。但我不知道如何在登录期间检查该列,并且仅在 active 值为 1 时才允许登录。我希望我有我尝试过的代码示例,但我确实被困住了。我正在使用 Laravel 8 和 Breeze。我假设检查将发生在函数的 AuthenticatedSessionController 文件内store。下面是文件。

AuthenticatedSessionController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthenticatedSessionController extends Controller
{
    /**
     * Display the login view.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('auth.login');
    }

    /**
     * Handle an incoming authentication request.
     *
     * @param  \App\Http\Requests\Auth\LoginRequest  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(LoginRequest $request)
    {

        $request->authenticate();

        $request->session()->regenerate();

        return redirect()->intended(RouteServiceProvider::HOME);
    }

    /**
     * Destroy an authenticated session.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy(Request $request)
    {
        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        return redirect('/');
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

请查看位于app/Http/Requests/LoginRequest.php 的authenticate() 函数


/**
     * Attempt to authenticate the request's credentials.
     *
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function authenticate()
    {
        $this->ensureIsNotRateLimited();

        //array_merge( $request->only($this->username(), 'password'), ['is_active' => 1 ])

        //if (! Auth::attempt($this->only('email', 'password'), $this->filled('remember'))) {
        if (! Auth::attempt(array_merge( $this->only('email', 'password'), ['is_active' => 1 ]), $this->filled('remember'))) {
            RateLimiter::hit($this->throttleKey());

            throw ValidationException::withMessages([
                'email' => __('auth.failed'),
            ]);
        }

        RateLimiter::clear($this->throttleKey());
    }

Run Code Online (Sandbox Code Playgroud)