Search code examples
phplaravelfortifylaravel-8laravel-jetstream

How do I authenticate a user in Laravel 8 Jetstream only if his status is active?


I am building a Laravel 8 application and have successfully implemented authentication. Now I want to check if a user's status is active before logging him in. I have added a field in the users table

username varchar
password varchar
....
status tinyint(1)
...

I am using JetStream and Fortify

Thank You


Solution

  • You can customize user authentication from app\Providers\JetStreamServiceProvider.php, on boot method :

    use App\Models\User;
    use Illuminate\Http\Request;
    use Laravel\Fortify\Fortify;
    
    public function boot()
    {
        $this->configurePermissions();
    
        Jetstream::createTeamsUsing(CreateTeam::class);
        Jetstream::updateTeamNamesUsing(UpdateTeamName::class);
        Jetstream::addTeamMembersUsing(AddTeamMember::class);
        Jetstream::deleteTeamsUsing(DeleteTeam::class);
        Jetstream::deleteUsersUsing(DeleteUser::class);
        // Below code is for your customization
        Fortify::authenticateUsing(function (Request $request) {
            $user = User::where('email', $request->email)->first();
    
           if ($user && Hash::check($request->password, $user->password)) {
                if ($user->status == 1) {  // it will return if status == 1
                     return $user;
                }
           }
    
        });
    }
    

    See the official Jetstream documentation of Customizing User Authentication