Разрешить пользователям с is_request 1 Не входить в систему
В настоящее время я работаю над системой, в которой люди могут подать заявку на регистрацию. Администратор должен будет принять запрос, чтобы пользователь мог войти в систему. В моей базе данных есть поле 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');
}
}

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

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


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
на атрибут или метод, содержащий информацию о принятом состоянии.
Если вы хотите, чтобы промежуточное программное обеспечение выполнялось при каждом запросе, вы можете добавить его как глобальное промежуточное программное обеспечение, добавив его в массив $middleware
app/Http/Kernel.php
.
Вы можете прочитать больше о промежуточном программном обеспечении и о том, как его создавать в документах: https://laravel.com/docs/master/middleware