Search code examples
pythonflaskflask-security

flask MethodView with decorators is giving error


Maybe I'm doing something wrong. I'm trying to use flask-security-too auth_required with flask's MethodView as described under https://flask.palletsprojects.com/en/1.1.x/views/#decorating-views, and exception is being raised when I try to access the page. python 3.6.8

from flask_security import auth_required

class RunningRoutesAdmin(MethodView):
    decorators = [auth_required]

    def get(self):
        return render_template('admin.jinja2',
                               pagename='Admin Home')

admin_view = RunningRoutesAdmin.as_view('admin')
app.add_url_rule('/admin/', view_func=admin_view, methods=['GET',])

exception

Traceback (most recent call last):
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\app.py", line 2463, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\app.py", line 2449, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\app.py", line 1866, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\lking\Documents\Lou's Software\projects\runningroutes\runningroutes\venv\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
TypeError: wrapper() missing 1 required positional argument: 'fn'

Solution

  • Ok - simple solution - since auth_required takes parameters - you need to:

    decorators = [auth_required()]
    

    Sorry - I suggested passing in None - which of course isn't correct. Passing in nothing or a list of acceptable methods (e.g. "session", "token") works fine.