#laravel #authentication #registration
Вопрос:
У меня есть опция Запомнить меня в моей форме входа в систему, которая отлично работает.
Я бы очень хотел предложить эту опцию в регистрационной форме, чтобы пользователю не пришлось снова входить в систему по истечении времени сеанса по умолчанию.
Я заглянул внутрь RegisterController.php в котором есть валидатор, создание и перенаправление, но я не вижу, как он на самом деле аутентифицирует пользователя после создания строки, что, по-видимому, позволяет мне использовать логику запоминания меня.
<?php
namespace AppHttpControllersAuth;
use AppUser;
use AppHttpControllersController;
use IlluminateSupportFacadesHash;
use IlluminateSupportFacadesValidator;
use IlluminateFoundationAuthRegistersUsers;
use IlluminateSupportFacadesSession;
use IlluminateSupportFacadesAuth;
use CarbonCarbon;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return IlluminateContractsValidationValidator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'country' => ['required', 'string'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return AppUser
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'country' => $data['country'],
'password' => Hash::make($data['password']),
'last_login_at' => Carbon::now()->toDateTimeString(),
]);
}
protected function redirectTo()
{
Session::flash('message', 'Thank you for registering ' . Auth::user()->name . '! Welcome to site.com!');
Session::flash('alert-class', 'alert-success');
return '/my-account';
}
}
Ответ №1:
Вы можете перезаписать свойство RegistersUsers (расположенное в вашем контроллере регистрации), которое обеспечивает эту функциональность.
Ответ №2:
Действительно, добавление этого в RegisterController является ответом:
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user, $request->remember);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}