2016-01-22 3 views
0

ПРОБЛЕМА: JWTAuth :: попытка ($ credentials) работает на моей локальной машине Windows. Когда пользователь вызывает/userLogin, предоставляя учетные данные (имя пользователя & пароль), он проверяет учетные данные и создает токен для пользователя. Но тот же код: JWTAuth :: попытка ($ credentials) is NOT, работающий при развертывании проекта на сервере Ubuntu.

ОПИСАНИЕ: Я использую tymondesigns/jwt-auth для реализации JSON Web лексем в моем проекте Laravel 5.1. Я создал 2 API REST:/userRegister &/userLogin.

Вот код /userRegister в 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; 
    } 
} 

Как вы можете заметить, я использую Bcrypt() для перед сохранением пароля.

Теперь, вот код /Userlogin в 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')); 
} 
  • /Регистрация пользователя Api работает как в моих окнах местного м/с, а также как в Ubuntu сервер. Также bcrypt() по паролю работает в .

  • НО,/userLogin работает в моих локальных локальных окнах, но не работает в Ubuntu Server.

Помогите мне устранить эту безмолвную скрытую ошибку. ТИА.

ДАЛЬНЕЙШИЕ ПОДРОБНОСТИ: Я также сверяются jwt.php файла как в моих окнах и сервере Ubuntu. У них одинаковые конфигурации. Также я использовал php artisan jwt: сгенерировал на сервере ubuntu.

ответ

1

Я, наконец, смог решить проблему, когда снова просмотрел код. К счастью, я мог это звать! Вот ошибка, которую я сделал. В какой-то момент времени я добавил этот код Bcrypt() так:

$password = bcrypt($request->input('password')); 

Но я уже использовал Bcrypt() перед сохранением в базе данных $ пароль.

$saveUser = new UserProfile(); 
$saveUser->password=bcrypt($password); 

Поскольку она была шифрования дважды перед сохранением в базу данных, когда я звонил/Userlogin апите, JWTAuth :: попытка ($ учетных данных) проверялись credintials и он был не в состоянии проверить. Поэтому я удалил bcrypt() в одном месте и теперь стал работать. [Решаемые].

Смежные вопросы