docs: def authenticate(self):
          """Send login request and update User instance, login headers, and token expiration"""
  
          # Temporarily remove auth from Swimlane session for auth request to avoid recursive loop during login request
          self._swimlane._session.auth = None
          resp = self._swimlane.request(
              'post',
              'user/login',
              json={
                  'userName': self._username,
                  'password': self._password
              },
          )
          self._swimlane._session.auth = self
  
          # Get JWT from response content
          json_content = resp.json()
          token = json_content.pop('token', None)
  
          # Grab token expiration
          token_data = jwt.decode(token, verify=False)
          token_expiration = pendulum.from_timestamp(token_data['exp'])
  
          headers = {
              'Authorization': 'Bearer {}'.format(token)
          }
  
          # Create User instance for authenticating user from login response data
          user = User(self._swimlane, _user_raw_from_login_content(json_content))
  
          self._login_headers = headers
          self.user = user
          self._token_expiration = token_expiration