Mandrizzy's avatar

How to check if a username exits using jquery validation and laravel

so i have a form and i want to check if a username exits before the user submits the form i'm using jquery validation plugin to validate the form and send a post request to check if the user name is vailable but i'm getting a server error of 419 and sometimes 500. here is a snippet of my code i have been told by someone it may have something to do with a csrf token laravel generates when a post request is sent however i don't know what to do ? js code below.

$.validator.addMethod('firstname_regex', function(value,element){
 return this.optional(element) || fnameregex.test(value);
},'This name is not valid.')

$.validator.addMethod('lastname_regex', function (value,element) {
 return this.optional(element) || lnameregex.test(value);
},'This name is not valid')

$.validator.addMethod('username_regex', function (value,element) {
 return this.optional(element) || usernameregex.test(value);
},'This username is not valid')

$.validator.addMethod('password_regex', function (value,element) {
    return this.optional(element) || passregex.test(value);
},'Passwords must be eight characters or more contain one uppercase, one numeric            
    number and one lowercase.')

$(function(){
    $('#signupform').validate({
      rules:{
         firstname:{
               required:true,
             firstname_regex:true,
                nowhitespace:true,
                minlength:3,
         },
         lastname:{
              required:true,
              lastname_regex:true,
              nowhitespace:true,
              minlength:3,
         },
         username:{
              required:true,
             username_regex:true,
             nowhitespace:true,
             remote:{
                    url:"checkusers",
                    type:"post"
               }
          },
            email:{
             required:true,
                email:true,
                 nowhitespace:true,
          },
          password:{
               required:true,
               password_regex:true,
              nowhitespace:true,
           },
          passconfirm:{
              required:true,
              password_regex:true,
             nowhitespace:true,
             equalTo:"#password",
          }

         },
         highlight: function(element) {
            $(element).closest('.form-group').addClass('has-error');
         $(element).closest('.form-control').css("border-color","#a94442");
       },
     unhighlight: function(element) {
           $(element).closest('.form-group').removeClass('has-error');
          $(element).closest('.form-control').css("border-color","#00b8e6");
      },
        messages:{
         passconfirm:{
              equalTo:"Please ensure your passwords match."
              },
             firstname:{
                 minlength:"Please enter a valid name."
          },
         lastname:{
              minlength:"Please enter a valid name."
          },
            username:{
                remote: "This username already exits."
          }
     }
  });
})

code for my controller

Route::post('/checkusers',function(){
$user = users::all()->where('username', Input::get('username'))->first();
   if ($user) {
        return false;
   } else {
          return true;
    }
});

i hope i am being clear enough for you guys to help me thanks very much. someone mention some about a token needs to be sent for laravel active session authentication I don't know what this means or how to go about solving but hopefully that may shed some light on my problem for anyone to help.

0 likes
5 replies
AR's avatar

First, in the route just return a dummy string to make sure you are hitting the route. After that change the route to:

Route::post('/checkusers',function(){

    $user = \App\User::where('username', Input::get('username'))->first();

    if ($user) {
            return false;
    } else {
        return true;
    }
});
biishmar's avatar

the problem is you are using POST type of ajax call so laravel expect CSRF token from the request, so use GET type, if u dont want laravel to check the security of ajax request...

Mandrizzy's avatar

@AR I have tried and tested with a dummy string and it is receiving the post request from jquery but their is something wrong with the eloquent model or the query I'm getting a 500 internal server error.

Snapey's avatar

Look in the Laravel log file. At the end will be the stack trace of the most recent error. Scroll back up slightly to see the first line of the error.

Mandrizzy's avatar

I found out what was wrong when using input in the eloquent model i had to place this at the top. use Illuminate\Support\Facades\Input;

i guess the input can be used without first placing that at the top had to do some research on the documentation

Please or to participate in this conversation.