Laravel 登录前如何检查用户活跃度(从数据库)

How to check user activeness (from database) before login in Laravel

在我的应用程序中,'users' table 中有一个 'status' 列。这表明用户活跃度。现在我想在登录系统之前检查用户的活跃度,如果他被停用则给出一条消息。这该怎么做?这里有几个答案,但我无法借助这些答案来完成这项工作。

这是我的LoginController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/dashboard';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {

        $this->middleware('guest')->except('logout');


    }




}

创建一个中间件class 来检查状态列。例如:

<?php namespace App\Http\Middleware;

use Closure;

class CheckStatusMiddleware {

    /**
     * Run the request filter.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user = User::where('email', $request->input('email'))->firstOrFail();

        if (!$user->active)
        {
            return redirect('home');
        }

        return $next($request);
    }
}

然后注册 class 并将其应用于必要的路线。

有关详细信息,请参阅 Middleware

您可以使用authenticated()方法。

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;

class LoginController extends Controller
{

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/dashboard';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    /**
     * The user has been authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return mixed
     */
    protected function authenticated(Request $request, $user)
    {
        // Check status
        if ($user->status == 'inactive') {
            $this->logout($request);

            // Send message
            throw ValidationException::withMessages([
                $this->username() => [__('Your status is inactive')],
            ]);
        }
    }
}