#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, чтобы сделать это еще более изящно.