jeudi 21 janvier 2016

Laravel JWTAuth::attempt($credentials) not working in Ubuntu Server

PROBLEM: JWTAuth::attempt($credentials) is working in my windows local machine. When user calls /userLogin by providing credentials(username & password), it verifies the credentials and creates a token for the user. But same code: JWTAuth::attempt($credentials) is NOT working when I deploy the project on to Ubuntu Server.

DESCRIPTION: I am using tymondesigns/jwt-auth for implementing JSON Web Tokens in my Laravel 5.1 project. I have built 2 REST APIs: /userRegister & /userLogin.

Here is code for /userRegister in UserController.php:

public function userRegister(Request $request)
{
    $validator = Validator::make($request->all(), [
        'email' => 'required',
        'username' => 'required',
        'password' => 'required',
        'country' => 'required',
        'zip_code' => 'required',
        'date_time' => 'required',
        'gender' => 'required',
    ]);

    try
    {
        if ($validator->fails())
            throw new Exception($validator->errors(), 409);

        $name = $request->input('name');
        $email = $request->input('email');
        $username = $request->input('username');
        $password = bcrypt($request->input('password'));
        $country = $request->input('country');
        $zip_code = $request->input('zip_code');
        $fb_login = $request->input('fb_login');
        $registration_date = $request->input('date_time');
        $gender = $request->input('gender');

        $user_email = UserProfile::where('email','=',$email)->first();
        if($user_email!=null)
        {
            throw new Exception("User with this email is already registered");
        }

        $check_username = UserProfile::where('username','=', $username)->first();
        if ($check_username != null)
        {
            throw new Exception("User with this username is already registered. Please use different username");
        }

        $saveUser = new UserProfile();
        $saveUser->name=$name;
        $saveUser->email=$email;
        $saveUser->username=$username;
        $saveUser->password=bcrypt($password);
        $saveUser->country=$country;
        $saveUser->zipcode=$zip_code;
        $saveUser->gender=$gender;
        $saveUser->fb_login=$fb_login;
        $saveUser->registration_date=$registration_date;

        $build_trial_date = new Carbon($registration_date);
        $trial_end_date = $build_trial_date->addDays(30);

        $saveUser->trial_end_date=$trial_end_date;
        $result = $saveUser->save();
        if (!$result)
            throw new Exception("Error in registration. Please try again.");

        $user_id = $saveUser->id;
        $loginUser = UserProfile::find($user_id);
        $loginUser->update(['logged_in' => 1]);

        return ResponseService::buildSuccessResponse("User registered successfully");
    }
    catch(Exception $e)
    {
        $data = [
            'error' => true,
            'result'  => [
                'status_code'   => $e->getCode(),
                'message'       => $e->getMessage(),
            ]
        ];
        $result = ResponseService::buildFailureResponse($data);
        return $result;
    }
}

As you can notice I am using bcrypt() for before saving password.

Now, here is code for /userLogin in UserController:

public function userLogin(Request $request)
{
    // grab credentials from the request
    $credentials = $request->only('username', 'password');
    Log::info("username and password obtained from Request: ".json_encode($credentials));

    try
    {
        if(JWTAuth::attempt($credentials)) // For Logging
        {
            Log::info("$ token = JWTAuth::attempt $ credentials Result: TRUE");
        }else{
            Log::info("$ token = JWTAuth::attempt $ credentials Result: FALSE");
        }

        // attempt to verify the credentials and create a token for the user
        if (! $token = JWTAuth::attempt($credentials))
        {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        // something went wrong whilst attempting to encode the token
        return response()->json(['error' => 'could_not_create_token'], 500);
    }

    Log::info("Generated token is: ".json_encode(compact('token')));
    // all good so return the token
    return response()->json(compact('token'));
}

  • /userRegistration Api is working both in my windows local m/c as well as in Ubuntu server. Also bcrypt() on password is working in it.

  • BUT, /userLogin is working in my windows local m/c but not working in Ubuntu Server.

Help me solve this silent-dead-hidden error. TIA.

FURTHER DETAILS: I have also cross-checked jwt.php file both in my windows and ubuntu server. They are having same configuratons. Also I have used php artisan jwt:generate on ubuntu server.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire