Как проверить активность пользователя (из базы данных) перед входом в систему Laravel - PullRequest
1 голос
/ 26 января 2020

В моем приложении есть столбец «status» в таблице «users». Что указывает на активность пользователя. Теперь я хочу проверить активность пользователя перед входом в систему и дать сообщение, если он деактивирован. Как это сделать? Здесь есть несколько ответов, но я не могу сделать эту работу с помощью этих ответов.

Это мой 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');


    }




}

Ответы [ 2 ]

1 голос
/ 26 января 2020

Создайте класс промежуточного программного обеспечения для проверки столбца состояния. Например:

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

Затем зарегистрируйте класс и примените его к необходимым маршрутам.

См. Промежуточное программное обеспечение для получения дополнительной информации.

0 голосов
/ 26 января 2020

Вы можете использовать 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')],
            ]);
        }
    }
}

...