code: def authenticated(
      method: Callable[..., Optional[Awaitable[None]]]
  ) -> Callable[..., Optional[Awaitable[None]]]:
      
  
      @functools.wraps(method)
      def wrapper(  # type: ignore
          self: RequestHandler, *args, **kwargs
      ) -> Optional[Awaitable[None]]:
          if not self.current_user:
              if self.request.method in ("GET", "HEAD"):
                  url = self.get_login_url()
                  if "?" not in url:
                      if urllib.parse.urlsplit(url).scheme:
                          # if login url is absolute, make next absolute too
                          next_url = self.request.full_url()
                      else:
                          assert self.request.uri is not None
                          next_url = self.request.uri
                      url += "?" + urlencode(dict(next=next_url))
                  self.redirect(url)
                  return None
              raise HTTPError(403)
          return method(self, *args, **kwargs)
  
      return wrapper
docs: Decorate methods with this to require that the user be logged in.
  
      If the user is not logged in, they will be redirected to the configured
      `login url <RequestHandler.get_login_url>`.
  
      If you configure a login url with a query parameter, Tornado will
      assume you know what you're doing and use it as-is.  If not, it
      will add a `next` parameter so the login page knows where to send
      you once you're logged in.