Laravel Login authentication system default methods, AuthenticatesUsers trait for login, RegistersUsers Trait for register
You can access these methods in LoginControllers:
The AuthenticatesUsers trait, which is part of Laravel's default authentication system, includes several methods that handle the logic around user authentication, login attempts, redirects, and more.
1. Credientials Method to check if status colum has value active
use Illuminate\Http\Request;
protected function credentials(Request $request)
{
// Include status check along with email and password
return array_merge($request->only($this->username(), 'password'), ['status' => 'active']);
}
2. OR Override the attemptLogin Method
use Illuminate\Http\Request;
protected function attemptLogin(Request $request)
{
// First, get the user by their email
$user = \App\Models\User::where($this->username(), $request->email)->first();
// Check if the user exists and if their status is 'non_active'
if ($user && $user->status === 'non_active') {
// If the user's status is non_active, redirect them with an error
return redirect()->back()->withErrors(['email' => 'Your account is not active.']);
}
// If the user is active, attempt login
return $this->guard()->attempt(
$this->credentials($request),
$request->filled('remember')
);
}
3. sendFailedLoginResponse if user is not authenticated, return responce also
/**
* Send the response after the user's login attempt fails.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*
* @throws \Illuminate\Validation\ValidationException
*/
protected function credentials(Request $request)
{
return array_merge($request->only($this->username(), 'password'), ['status' => 'active']);
}
protected function sendFailedLoginResponse(Request $request)
{
$user = \App\Models\User::where($this->username(), $request->email)->first();
if ($user && $user->status === 'non_active') {
// If the user is non_active, show this custom error
throw ValidationException::withMessages([
$this->username() => ['Your account is not active.'],
]);
}
// For other cases, use the default error
throw ValidationException::withMessages([
$this->username() => [trans('auth.failed')],
]);
}
4. showLoginForm : Displays the login form to the user.
public function showLoginForm()
{
return view('auth.login');
}
5. LOGIN METHOD: Handles the login request, processes the credentials, and attempts to authenticate the user.
public function login(Request $request)
{
$this->validateLogin($request);
if (method_exists($this, 'hasTooManyLoginAttempts') &&
$this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
if ($this->attemptLogin($request)) {
return $this->sendLoginResponse($request);
}
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
6. sendLoginResponse: Handles the response after a successful login.
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();
$this->clearLoginAttempts($request);
return $this->authenticated($request, $this->guard()->user())
?: redirect()->intended($this->redirectPath());
}
7. Logout
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
8. redirectPath
protected function redirectPath()
{
return '/home';
}
9.
RegistersUsers Trait
1.showRegistrationForm
public function showRegistrationForm()
{
return view('auth.register');
}
2. Handles the registration request, validates the input, and creates a new user.
Default behavior: Validates the form input, creates the user, logs them in, and redirects to the intended page.
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
3. validator: Validates the registration form data.
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
4. create
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
5. Handles additional logic after the user is registered (optional).
protected function registered(Request $request, $user)
{
//
}
EXAMPLE:
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* 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 \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
}