How to make a login form with Fluent Form

Easily create a login form using the fluentform_before_insert_submission hook.

First, make a form with email and password (Make sure the name attribute is ’email’ and ‘password’ for the corresponding field). Then paste the form shortcode into a page. Change the form id in the bellow code (23) with your created fluentform’s form id and paste in your theme’s functions.php file or in a PHP code snippet plugin..

Note: In this example: No actual form submission will happen as we are redirecting the user before inserting the data



add_action('fluentform_before_insert_submission', function ($insertData, $data, $form) {
   
 if($form->id != 23) { // 23 is your form id. Change the 23 with your own login for ID
        return;
    }
    $redirectUrl = home_url(); // You can change the redirect url after successful login

    if (get_current_user_id()) { // user already registered
        wp_send_json_success([
            'result' => [
                'redirectUrl' => $redirectUrl,
                'message' => 'Your are already logged in. Redirecting now...'
            ]
        ]);
    }

    $email = \FluentForm\Framework\Helpers\ArrayHelper::get($data, 'email'); // your form should have email field
    $password = \FluentForm\Framework\Helpers\ArrayHelper::get($data, 'password'); // your form should have password field

    if(!$email || !$password) {
        wp_send_json_error([
            'errors' => ['Please provide email and password']
        ], 423);
    }

    $user = get_user_by_email($email);
    if($user && wp_check_password($password, $user->user_pass, $user->ID)) {
        wp_clear_auth_cookie();
        wp_set_current_user($user->ID);
        wp_set_auth_cookie($user->ID);
        /* user is not logged in.
        * If you use wp_send_json_success the the submission will not be recorded
        * If you remove the wp_send_json_success then it will record the data in fluentform
        * in that case you should redirect the user on form submission settings
        */
        wp_send_json_success([
            'result' => [
                'redirectUrl' => $redirectUrl,
                'message' => 'Your are logged in, Please wait while you are redirecting'
            ]
        ]);
    } else {
        // password or user don't match
        wp_send_json_error([
            'errors' => ['Email / password is not correct']
        ], 423);
    }
}, 10, 3);

For details of the hook fluentform_validate_input_item_input_email check this documentation link.

Powered by BetterDocs

Leave a Reply

Your email address will not be published. Required fields are marked *