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 >