Разрешить пользователям с is_request 1 не входить в систему - PullRequest
1 голос
/ 16 января 2020

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

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

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

Update :: DB Table enter image description here

Ответы [ 2 ]

3 голосов
/ 17 января 2020

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

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

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

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

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