Laravel - Auth / Unique username instead of email
ForgotPasswordController.php
/**
* Send a reset link to the given user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
public function sendResetLinkEmail (Request $ request )
{
$ this ->validate ($ request , ['username' => 'required' ], ['username.required' => 'Please enter your username.' ]);
$ response = $ this ->broker ()->sendResetLink (
$ request ->only ('username' )
);
return $ response == Password ::RESET_LINK_SENT
? $ this ->sendResetLinkResponse ($ request , $ response )
: $ this ->sendResetLinkFailedResponse ($ request , $ response );
}
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username ()
{
return 'username' ;
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator (array $ data )
{
return Validator ::make ($ data , [
'name' => ['required' , 'string' , 'max:255' ],
'username' => ['required' , 'string' , 'max:255' , 'unique:users' ],
'email' => ['required' , 'string' , 'email' , 'max:255' ],
'password' => ['required' , 'string' , 'min:8' , 'confirmed' ],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create (array $ data )
{
return User ::create ([
'name' => $ data ['name' ],
'username' => $ data ['username' ],
'email' => $ data ['email' ],
'password' => Hash ::make ($ data ['password' ]),
]);
}
ResetPasswordController.php
/**
* Display the password reset view for the given token.
*
* If no token is present, display the link request form.
*
* @param \Illuminate\Http\Request $request
* @param string|null $token
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function showResetForm (Request $ request , $ token = null )
{
return view('auth.passwords.reset' )->with (
['token' => $ token , 'username' => $ request ->username ]
);
}
/**
* Get the password reset validation rules.
*
* @return array
*/
protected function rules ()
{
return [
'token' => 'required' ,
'username' => 'required' ,
'password' => 'required|confirmed|min:6' ,
];
}
/**
* Get the password reset credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials (Request $ request )
{
return $ request ->only (
'username' ,
'password' ,
'password_confirmation' ,
'token'
);
}
/**
* Get the response for a failed password reset.
*
* @param \Illuminate\Http\Request $request
* @param string $response
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
protected function sendResetFailedResponse (Request $ request , $ response )
{
return redirect()->back ()
->withInput ($ request ->only ('username' ))
->withErrors (['username' => trans($ response )]);
}
<div class =" form-group row" >
<label for =" username" class =" col-md-4 col-form-label text-md-right" >{{ __ (' Username' ) } } </label >
<div class =" col-md-6" >
<input id =" username" type =" text" class =" form-control @error (' username' ) is-invalid @enderror " name =" username" value =" {{ old (' username' ) } }" required autocomplete =" username" autofocus >
@error (' username' )
<span class =" invalid-feedback" role =" alert" >
<strong >{{ $message } } </strong >
</span >
@enderror
</div >
</div >
<div class =" form-group row" >
<label for =" username" class =" col-md-4 col-form-label text-md-right" >{{ __ (' Username' ) } } </label >
<div class =" col-md-6" >
<input id =" username" type =" text" class =" form-control @error (' username' ) is-invalid @enderror " name =" username" value =" {{ $username ?? old (' username' ) } }" required autocomplete =" username" autofocus >
@error (' username' )
<span class =" invalid-feedback" role =" alert" >
<strong >{{ $message } } </strong >
</span >
@enderror
</div >
</div >
<div class =" form-group row" >
<label for =" username" class =" col-md-4 col-form-label text-md-right" >{{ __ (' Username' ) } } </label >
<div class =" col-md-6" >
<input id =" username" type =" text" class =" form-control @error (' username' ) is-invalid @enderror " name =" username" value =" {{ old (' username' ) } }" required autocomplete =" username" autofocus >
@error (' username' )
<span class =" invalid-feedback" role =" alert" >
<strong >{{ $message } } </strong >
</span >
@enderror
</div >
</div >
<div class =" form-group row" >
<label for =" username" class =" col-md-4 col-form-label text-md-right" >{{ __ (' Username' ) } } </label >
<div class =" col-md-6" >
<input id =" username" type =" text" class =" form-control @error (' username' ) is-invalid @enderror " name =" username" value =" {{ old (' username' ) } }" required autocomplete =" username" autofocus >
@error (' username' )
<span class =" invalid-feedback" role =" alert" >
<strong >{{ $message } } </strong >
</span >
@enderror
</div >
</div >