Как я могу отключить автоматический вход в систему после регистрации в laravel 8?

#laravel #fortify

#laravel #укрепление

Вопрос:

При использовании laravel 8 с fortify, поэтому у меня нет

App Http Controllers Auth RegisterController

Заранее спасибо

Ответ №1:

Сначала вы должны создать контроллер, предпочтительно в appHttpControllersAuth called RegisteredUserController , в этом контроллере вы должны перезаписать хранилище методов класса RegisteredUserController .

Скопируйте store метод на свой новый контроллер и удалите строку $this->guard->login($user); .

Это должно выглядеть так:

 <?php

namespace AppHttpControllersAuth;

use IlluminateAuthEventsRegistered;
use IlluminateHttpRequest;
use LaravelFortifyContractsCreatesNewUsers;
use LaravelFortifyContractsRegisterResponse;

class RegisteredUserController
    extends LaravelFortifyHttpControllersRegisteredUserController
{

    public function store(Request $request, CreatesNewUsers $creator): RegisterResponse {
        event(new Registered($user = $creator->create($request->all())));
        return app(RegisterResponse::class);
    }

}
  

Наконец, измените /register путь по умолчанию, который указывает на ваш новый контроллер.

 Route::post('/register', 'AuthRegisteredUserController@store');
  

Комментарии:

1.Я пришел поблагодарить вас за то, что вы нашли время ответить на этот вопрос. Это наиболее практичное решение, которое я нашел до сих пор. Это решило проблему автоматического входа в систему после регистрации пользователя. Я просто собираюсь упомянуть альтернативу при добавлении маршрута с помощью пользовательского контроллера: // Above, in the header of the web.php file of the router use App Http Controllers Auth RegisteredUserController; ` // Below, when declaring the route with the custom controller Route :: post ('/ register', [RegisteredUserController :: class, 'store']);

Ответ №2:

Fortify автоматически зарегистрирует пользователя, только если вы вернете пользователя из CreateNewUser класса. Вместо возврата созданного пользователя выдайте исключение вместе с флэш-сообщением. Fortify попытается перенаправить вас на домашнюю страницу и вернет вас обратно на страницу входа, поскольку пользователь не прошел проверку подлинности, показывая вам флэш-сообщение. Ниже приведен обзор процесса в файле AppActionsFortifyCreateNewUser .

 public function create(array $input)
{
    Validator::make($input, [
        'name' => ['required', 'string', 'max:255'],
        'email' => [
            'required',
            'string',
            'email',
            'max:255',
            Rule::unique(User::class),
        ],
        'password' => $this->passwordRules(),
    ])->validate();

    $user = User::create([
        'name' => $input['name'],
        'email' => $input['email'],
        'password' => Hash::make($input['password'])
    ]);

    event(new Registered($user));

    flash('Registration successful! Awaiting approval from admin.')
        ->success()
        ->important();

    throw new IlluminateAuthAuthenticationExceptionAuthenticationException();
}
  

Я думаю, что может быть другое решение для подключения к любому из событий Fortify, чтобы сделать это еще более изящно.