code: def login_required(function=None, username=None, basic=False, must=None):
      
  
      if function and not callable(function):
          raise ValueError(
              'Decorator receives only named arguments, '
              'try login_required(username="foo")'
          )
  
      def check(validators):
          """Return in the first validation error, else return None"""
          if validators is None:
              return
          if not isinstance(validators, (list, tuple)):
              validators = [validators]
          for validator in validators:
              error = validator(get_username())
              if error is not None:
                  return SimpleLogin.get_message('auth_error', error), 403
  
      def dispatch(fun, *args, **kwargs):
          if basic and request.is_json:
              return dispatch_basic_auth(fun, *args, **kwargs)
  
          if is_logged_in(username=username):
              return check(must) or fun(*args, **kwargs)
          elif is_logged_in():
              return SimpleLogin.get_message('access_denied'), 403
          else:
              flash(SimpleLogin.get_message('login_required'), 'warning')
              return redirect(url_for('simplelogin.login', next=request.path))
  
      def dispatch_basic_auth(fun, *args, **kwargs):
          simplelogin = current_app.extensions['simplelogin']
          auth_response = simplelogin.basic_auth()
          if auth_response is True:
              return check(must) or fun(*args, **kwargs)
          else:
              return auth_response
  
      if function:
          @wraps(function)
          def simple_decorator(*args, **kwargs):
              """This is for when decorator is @login_required"""
              return dispatch(function, *args, **kwargs)
          return simple_decorator
  
      def decorator(f):
          """This is for when decorator is @login_required(...)"""
          @wraps(f)
          def wrap(*args, **kwargs):
              return dispatch(f, *args, **kwargs)
          return wrap
      return decorator
docs: Decorate views to require login
      @login_required
      @login_required()
      @login_required(username='admin')
      @login_required(username=['admin', 'jon'])
      @login_required(basic=True)
      @login_required(must=[function, another_function])