Разрешить пользователям с is_request 1 Не входить в систему

Разрешить пользователям с is_request 1 Не входить в систему

16.01.2020 11:28:52 Просмотров 36 Источник

В настоящее время я работаю над системой, в которой люди могут подать заявку на регистрацию. Администратор должен будет принять запрос, чтобы пользователь мог войти в систему. В моей базе данных есть поле is_request, и при каждой регистрации это поле по умолчанию устанавливается в 1 (по умолчанию устанавливается в 1 в базе данных) , что означает да. Когда пользователь с этим полем, равным 1, попытается войти в систему, он должен будет получить уведомление о том, что его учетная запись еще не активирована. Как я могу это сделать?

Когда пользователь пытается зарегистрироваться, происходит следующее:

protected function create(array $data)
    {
        $users = User::where('role_id', 1)->get();

        $user = User::create([
            'firstname' => $data['firstname'],
            'lastname' => $data['lastname'],
            'email' => $data['email'],
            'role_id' => 3,
            'activated' => 0,
            'user_token' => Str::random(32),
            'password' => Hash::make($data['password']),
        ]);

        foreach($users as $admin) {
            $admin->notify(new registerRequest($user));
        }

        Mail::to($user->email)->send(new RegisterRequestSend($user));

        return $user;
    }

И когда администратор в бэкэнде "принимает" запрос, поле is_requestбудет установлено в 0, и пользователь должен иметь возможность войти в приложение.

Контроллер входа выглядит следующим образом

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

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

Обновление:: таблица БД enter image description here

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59777349/allow-users-with-is-request-1-to-not-log-in#comment105699604_59777349
Вот как вы можете сделать простой способ переключения оператора или оператора if

Ответы - Разрешить пользователям с is_request 1 Не входить в систему / Allow users with is_request 1 to not log in

Chukwuebuka

16.01.2020 11:46:09

Сначала вы должны заставить администратора обновить атрибуты пользователя, когда они будут уведомлены

User::where('id' , $user_id)->update(['is_request' => 0]);

затем добавьте это в свой контроллер входа

public function credentials(Request $request)
    {
        $credentials = $request->only($this->username(), 'password');
        $credentials = array_add($credentials, 'is_request', 0);
        return $credentials;
    }
https://stackoverflow.com/questions/59777349/allow-users-with-is-request-1-to-not-log-in/59777578#comment105699270_59777578
Вы можете предположить, что всегда есть администратор. Как это может быть реализовано? Я не вижу связи?
Является ответом!
KFoobar

17.01.2020 12:09:13

Вы можете создать глобальное промежуточное программное обеспечение, которое проверяет, принят ли пользователь или нет:

namespace App\Http\Middleware;

use Closure;

class CheckIfAccepted
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (auth()->check() && !auth()->user()->isAccepted) {
            auth()->logout();

            return redirect('not-accepted');
        }

        return $next($request);
    }
}

Это промежуточное программное обеспечение будет выходить из любого авторизованного пользователя, который не будет принят, и перенаправлять его на маршрут по вашему выбору.

Измените auth()->user()->isAcceptedна атрибут или метод, содержащий информацию о принятом состоянии.

Если вы хотите, чтобы промежуточное программное обеспечение выполнялось при каждом запросе, вы можете добавить его как глобальное промежуточное программное обеспечение, добавив его в массив $middlewareapp/Http/Kernel.php.

Вы можете прочитать больше о промежуточном программном обеспечении и о том, как его создавать в документах: https://laravel.com/docs/master/middleware

https://stackoverflow.com/questions/59777349/allow-users-with-is-request-1-to-not-log-in/59777824#comment105699860_59777824
Спасибо KFoobar это ответ, который я искал. Как я могу реализовать это или добавить его в Kernel.phpдостаточно php?
https://stackoverflow.com/questions/59777349/allow-users-with-is-request-1-to-not-log-in/59777824#comment105699966_59777824
@Rainierlaan добавляет его в Kernel.phpдолжно быть достаточно. Я также отредактировал свой ответ.
Помочь в развитии проекта:
Закрыть X