使用 Laravel 8 和 Breeze 登录时,如何检查用户是否处于“活跃状态”?

4

我在用户表中有一个布尔列来表示active。但是我无法想出如何在登录时检查该列,并且仅允许在active为1时登录。我希望能提供我尝试过的代码示例,但我现在无从下手。我正在使用Laravel 8和Breeze。我假设检查将发生在store函数内的AuthenticatedSessionController文件中。以下是该文件。

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('/');
    }
}
2个回答

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());
    }


1

在进行POST登录请求时,您必须使用AuthenticatesUsers

AuthenticatesUsers是Laravel的默认身份验证trait,提供了与登录相关的方法。

您需要将以下方法放置在LoginController中,以覆盖默认方法并添加您的列以检查用户是否处于活动状态。

protected function credentials(Request $request)
{
    return array_merge($request->only($this->username(), 'password'), ['active' => 1]);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接