public function authenticate($request)
 {
     $credentials = $request->only('email', 'password');
     $apiResponse = new ApiResponse();
     if ($lockedOut = $this->hasTooManyLoginAttempts($request)) {
         $this->fireLockoutEvent($request);
         $msg = $this->getLockoutErrorMessage($this->secondsRemainingOnLockout($request));
         return $apiResponse->appendError('auth', $msg)->statusBadRequest()->setMessage($msg)->response();
     }
     try {
         if (!($token = JWTAuth::attempt($credentials))) {
             $this->incrementLoginAttempts($request);
             return $apiResponse->appendError('auth', trans('user::errors.authenticate'))->statusUnauthorized()->setMessage(trans('user::errors.authenticate'))->response();
         }
     } catch (JWTException $e) {
         return $apiResponse->appendError('auth', trans('user::errors.could_not_create_token'))->statusInternalServerError()->setMessage(trans('user::errors.could_not_create_token'))->response();
     }
     $modules = $this->module->my();
     $permissions = $this->module->permissions();
     return $apiResponse->setData(Auth::user()->load('group'))->append('token', $token)->appendData('modules', $modules)->appendData('modules_flat', $modules->pluck('slug'))->appendData('permissions', $permissions)->appendData('permissions_flat', $permissions->pluck('slug'))->response();
 }