Customizable User Authorization & User Management: Register, Confirm, Login, Change username/password, Forgot password and more.

Overview

Flask-User v1.0

https://travis-ci.org/lingthio/Flask-User.svg?branch=master https://img.shields.io/pypi/l/Flask-User?style=flat
Attention:
Flask-User v1.0 is a Production/Stable version.
The previous version is Flask-User v0.6.

User Authentication and Management

So, you're writing a Flask web application and would like to authenticate your users.
You start with a simple Login page, but soon enough you'll need to handle:
  • Registrations and Email Confirmations
  • Change Usernames, Change Passwords, and Forgotten Passwords

And wouldn't it be nice to also offer:

  • Added Security
  • Increased Reliability
  • Role-based Authorization
  • Internationalization (Chinese, Dutch, English, Farsi, Finnish, French, German, Italian, Polish, Russian, Slovak, Spanish, Swedish, Turkish and Ukrainian)

Customizable, yet Ready to use

  • Largely Configurable -- By overriding configuration settings.
  • Fully Customizable -- By overriding methods and properties.
  • Ready to use -- Through sensible defaults.
  • Supports SQL and MongoDB databases.

Well documented

Additional features

  • MIT License
  • Tested on Python 2.7, 3.4, 3.5, 3.6, 3.7 and 3.8. Coverage: Over 90%.
  • Event hooking -- Through efficient signals.
  • Support for multiple emails per user

Minimal Requirements

  • bcrypt 2.0+
  • cryptography 1.6+
  • Flask 0.9+
  • Flask-Login 0.2+
  • Flask-WTF 0.9+
  • passlib 1.7+

Alternatives

Authors

Lead developer and Maintainer

Collaborators and Maintainers
Andrey Semakin -- https://github.com/and-semakin

Contributors

Contact us

http://img.shields.io/static/v1?label=Issues&message=Flask-User&logo=github http://img.shields.io/static/v1?label=Telegram&message=@flask_user&logo=telegram&color=blue
Comments
  • SECURITY ISSUE: next parameter can redirect to any phishing site you like.

    SECURITY ISSUE: next parameter can redirect to any phishing site you like.

    Hi Guys,

    Working at a security firm right now and they tell me the next URL can be crafted in various ways to point to a phishing site after you login.

    So with flask_user I can make a link to the login page like:

    http://yourealsite.com/login/?next=http://my-fake-malicous-site.com/login/

    If I show a phishing site with the same login page and error I can harvest peoples logins.

    Solution: the next parameter should be filtered such that no domain/http/protocol is included.

    Feature request Fixed and Released Security Issue 
    opened by aphillipo 15
  • Switching away from py-bcrypt backend

    Switching away from py-bcrypt backend

    As passlib duly notes, all pip versions (and HEAD too) of py-bcrypt are vulnerable to the BSD wraparound bug:

    UserWarning: passlib.hash.bcrypt: Your installation of the 'pybcrypt' backend is vulnerable to the bsd wraparound bug, and should be upgraded or replaced with another backend (this warning will be fatal under passlib 1.7)

    Aside from being a serious security vulnerability, being fatal in passlib 1.7+ means it will also make Flask-User unusable under that version until fixed.

    Alternative backends supported by passlib like bcrypt should be considered switching to.

    opened by Shizmob 12
  • AttributeError: 'NoneType' object has no attribute 'password'

    AttributeError: 'NoneType' object has no attribute 'password'

    Happens if I delete the DB file. Works if I leave it alone for a few. Nothing with variables, this is all something with Flask-User Full Traceback:

    Traceback (most recent call last):
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 2309, in __call__
        return self.wsgi_app(environ, start_response)
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 2295, in wsgi_app
        response = self.handle_exception(e)
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 1741, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/_compat.py", line 35, in reraise
        raise value
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 2292, in wsgi_app
        response = self.full_dispatch_request()
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 1815, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 1718, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/_compat.py", line 35, in reraise
        raise value
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 1813, in full_dispatch_request
        rv = self.dispatch_request()
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 1799, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/home/ec2-user/environment/AmusedGrape/ask/server.py", line 128, in home_page
        return render_template('index.html')
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/templating.py", line 133, in render_template
        ctx.app.update_template_context(context)
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask/app.py", line 792, in update_template_context
        context.update(func())
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask_login/utils.py", line 368, in _user_context_processor
        return dict(current_user=_get_user())
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask_login/utils.py", line 335, in _get_user
        current_app.login_manager._load_user()
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask_login/login_manager.py", line 359, in _load_user
        return self.reload_user()
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask_login/login_manager.py", line 321, in reload_user
        user = self.user_callback(user_id)
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask_user/user_manager.py", line 130, in load_user_by_user_token
        user = self.db_manager.UserClass.get_user_by_token(user_token)
      File "/home/ec2-user/environment/AmusedGrape/ask/flask/lib/python3.6/dist-packages/flask_user/user_mixin.py", line 52, in get_user_by_token
        user_password = '' if user_manager.USER_ENABLE_AUTH0 else user.password[-8:]
    AttributeError: 'NoneType' object has no attribute 'password'
    
    opened by jackmerrill 11
  • Support for a primary key field name other than 'id'

    Support for a primary key field name other than 'id'

    Using Flask-User for the first time. For the most part, I'm pretty impressed. Great project, well executed. Apologies in advance for the lengthy issue posting, but I hope all the extra detail is helpful.

    The problem

    I've just spent quite a while tracking down a number of unexpected behaviors due to a schema assumption that I have not found explicitly stated in the project documentation. I'm using the SQLAlchemyAdapter in my project.

    For quite some time, it was impossible to figure out what was going on because there were no errors thrown by Flask-User. Instead, when it found itself unable to do something, it just dropped me back to the login page without alerting me to what the actual failure was (in dev/debug mode).

    Pretty much every single bit of functionality that works with a User object expects to do so via an explicit id column/attribute existing on the User model itself.

    I'm pretty sure I'm not alone in the Python world in not using id as my primary key column in my db models--because id() is part of Python's __builtin__ module. Kind of like how I never use type as an attribute, for the same reason. Instead, I've long made it a habit of using pk as the primary key attribute in db models.

    How does this matter to Flask-User?

    Well, in some places, I was initially able to get around this by adding an id property to my model (trying to not have to create a model with a primary key attribute different from all the other application models):

    @property
    def id(self):
        return self.pk
    

    This worked for a bit, in certain spots, until I started tackling password resets. I was able to get a reset email sent off successfully, but each time I clicked on the link, I was told the token was invalid. I verified the token myself, and it was indeed valid. I also verified it had not expired (it'd only been a few seconds, but anything could happen, right?). I checked directly with the database to ensure it was indeed saved to the User object. It was.

    So, I started debugging the logic from the built in reset_password() view function. That's when I landed on the problem being in UserManager.find_user_by_id(). It was returning no User object. Here's a quick refresher on the logic I copied over:

    #  from reset_password() view
    mgr = current_app.user_manager
    is_valid, has_expired, user_id = mgr.verify_token(token, mgr.reset_password_expiration)
    # returns: is_valid=True, has_expired=False, user_id=123
    
    # next up, find the user who owns the token
    user = mgr.find_user_by_id(user_id)  # here, user is None
    

    Interestingly enough, UserManager.verify_token() was returning the user_id for the token provided to the view. So, that's when I figured it was the id attribute itself--something must be happening in the query that was actually passing an id=user_id instead of relying on a more abstract query that doesn't assume the name of the primary key column. I also guessed that my id property def was screwing up raising a helpful error (it was).

    So, I checked out the find_user_by_id() source, and found:

    # inside flask_user/__init__.py
    def find_user_by_id(self, user_id):
            return self.db_adapter.find_object(self.db_adapter.UserClass, id=user_id)
    

    That call to SQLAlchemyAdapter.find_object in turn calls:

    # inside db_adapters.py
    query = query.filter(field==field_value)  # case sensitive!!
    

    Eureka!

    That filter() method from SQLAlchemy is an attribute-specific query method. So, it wasn't failing because my id property was an attribute, but it was failing to have the desired effect (finding the user by its primary key value).

    I know, I know, this wouldn't be happening if I'd just used the id column like the docs show.

    The problem is, I didn't actually notice the User model schema until I was hours into working with Flask-User. I know, still my fault. But I wanted to create this issue anyway, both to offer some feedback, and provide some help in case others experience the same thing.

    Suggestions for schema-agnostic primary key queries

    The major motivator for submitting this issue is to suggest this is, while still arguably a developer's fault for not thinking the schema matters so dearly, an opportunity to improve Flask-User's handling of primary key queries and any needs to refer to and/or work with User objects by their primary key values.

    I'm not sure about the other db adapter classes, but I know SQLAlchemy offers a handy helper method when it comes to looking up objects by their primary keys -- it's the Query.get() method! All you have to do is provide it the object's primary key as a single argument (no field names, keywords, or anything else required). An example implementation could be as simple as:

    # in db_adapters.py
    # for SQLAlchemy, not sure about others
    
    def get_object(self, ObjectClass, pk):
            """ Find single object of class 'ObjectClass' by specified primary key"""
            return ObjectClass.query.get(pk)
    

    Query.get() is guaranteed to always return one and only one object based on its underlying identity field as defined in its model. So, it's the easiest query that can be made via SQLAlchemy. It would also help make Flask-User less coupled to an assumed schema for User models.

    Suggestion for schema-agnostic primary key usage

    Because Flask-User depends on Flask-Login (and even offers its own UserMixin developers can use that extend's Flask-Login's own UserMixin class), I felt like this was a pretty good situation to highlight how relying on certain schema columns/attributes was a bit too much coupling for an extension.

    Flask-Login already expects a get_id() method, and its UserMixin includes this method, as well as instructing developers to implement their own method if they need to specify how to get the id value for their custom User models. Moreover, it also instructs developers to specify their own user_loader() method to ensure that whatever the id value is, the LoginManager can query it from the db. I haven't gone through all the Flask-User code, but it seems to me the best de-coupled approach would be for Flask-User to rely, like Flask-Login does, on the result of the get_id() method whenever it needs a User object's primary key value. When it needs to query by that value, it should use the query.get() method from SQLAlchemy, instead of filtering on a schema-dependent primary key attribute value.

    From what I can see, Flask-User implements the Flask-Login requirement for a user_loader method via its _user_loader() method. That method calls the schema-dependent find_user_by_id() method that I've already detailed above. Based on my suggestions, and barring any other areas I haven't yet found in the code, if find_user_by_id() was changed to use a get() instead of a filter() query call, this would instantly decouple Flask-User from its schema dependence for primary keys (for SQLAlchemy, at least).

    It doesn't solve other schema-dependence issues, but those attributes are, for the most part, pretty sensible as far as field names are concerned (and they don't clash with __builtin__ methods/keywords). However, I still think it'd be helpful to point out that the fields are required--and required to be named exactly as they appear--in the docs. Even better would be to offer users a way to specify those fields that Flask-User requires for its functionality to work properly. That could be as easy as a dict or tuple passed in so people could specify field mappings.

    Thanks for an overall fantastic extension.

    Feature request in dev 
    opened by bobwaycott 9
  • Support Login with remember_me

    Support Login with remember_me

    I'm using minimal app version. Is it possible to add the remember_me option with Flask-User? Also, why there is no recipe or example that shows how to use Flask-User with 'session'.

    Feature request Fixed and Released 
    opened by suvirbhargav 8
  • pkg_resources.DistributionNotFound: The 'Flask' distribution was not found and is required by Flask-Login

    pkg_resources.DistributionNotFound: The 'Flask' distribution was not found and is required by Flask-Login

    Flask_User is breaking the installation on AWS using ElasticBeanStalk. The specific portion of the error log is as follows:

    Collecting Flask-User==1.0.1.3 (from -r /opt/python/ondeck/app/requirements.txt (line 16))
    Using cached https://files.pythonhosted.org/packages/fd/e6/092c5c74251372568665f59e4df78d3450992289d5023e2abb77eee7b905/Flask-User-1.0.1.3.tar.gz
    Complete output from command python setup.py egg_info:
    
    Installed /tmp/pip-build-k2s8h7v3/Flask-User/.eggs/Flask_Login-0.4.1-py3.6.egg
    Searching for Flask
    Downloading https://files.pythonhosted.org/packages/c1/ff/bd9a4d2d81bf0c07d9e53e8cd3d675c56553719bbefd372df69bf1b3c1e4/Flask-Login-0.4.1.tar.gz#sha256=c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec
    Best match: Flask Login-0.4.1
    Processing Flask-Login-0.4.1.tar.gz
    Writing /tmp/easy_install-wwxz50l_/Flask-Login-0.4.1/setup.cfg
    Running Flask-Login-0.4.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-wwxz50l_/Flask-Login-0.4.1/egg-dist-tmp-qnbi69bv
    removing '/tmp/pip-build-k2s8h7v3/Flask-User/.eggs/Flask_Login-0.4.1-py3.6.egg' (and everything under it)
    creating /tmp/pip-build-k2s8h7v3/Flask-User/.eggs/Flask_Login-0.4.1-py3.6.egg
    Extracting Flask_Login-0.4.1-py3.6.egg to /tmp/pip-build-k2s8h7v3/Flask-User/.eggs
    
    Installed /tmp/pip-build-k2s8h7v3/Flask-User/.eggs/Flask_Login-0.4.1-py3.6.egg
    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-build-k2s8h7v3/Flask-User/setup.py", line 87, in <module>
    tests_require=['pytest'],
    File "/usr/lib64/python3.6/distutils/core.py", line 108, in setup
    _setup_distribution = dist = klass(attrs)
    File "/opt/python/run/venv/local/lib/python3.6/site-packages/setuptools/dist.py", line 315, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
    File "/opt/python/run/venv/local/lib/python3.6/site-packages/setuptools/dist.py", line 361, in fetch_build_eggs
    replace_conflicting=True,
    File "/opt/python/run/venv/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 853, in resolve
    raise DistributionNotFound(req, requirers)
    pkg_resources.DistributionNotFound: The 'Flask' distribution was not found and is required by Flask-Login
    
    ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-k2s8h7v3/Flask-User/
    You are using pip version 9.0.1, however version 18.1 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    2019-01-09 07:00:25,743 ERROR Error installing dependencies: Command '/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' returned non-zero exit status 1
    Traceback (most recent call last):
    File "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py", line 22, in main
    install_dependencies()
    File "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py", line 18, in install_dependencies
    check_call('%s install -r %s' % (os.path.join(APP_VIRTUAL_ENV, 'bin', 'pip'), requirements_file), shell=True)
    File "/usr/lib64/python2.7/subprocess.py", line 190, in check_call
    raise CalledProcessError(retcode, cmd)
    CalledProcessError: Command '/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' returned non-zero exit status 1.
    

    Any help on the issue would be appreciated. It seems flask_user is unable to identify the existing installation of Flask library.

    opened by zacqed 7
  • How to disable built in views?

    How to disable built in views?

    I just try to use Flask-User to secure Flask-Admin's views, add users with different roles.

    But I have problem with integrating Flask-user's views into Flask-Admin's interface. Just changing template extending raise jinja2 extension.

    I have trying to create Flask-Admin's views that will do the same thing that Flask-User's views do. But how can I remove built-in library endpoints from app?

    NOTE I have tried to change view functions but it do nothing.

    Question 
    opened by LotosikRa 7
  • User Invitation Functionality

    User Invitation Functionality

    I'm looking to send an invite via email to a user, sort of like an admin tool to add users without them "registering" through the normal process.

    I see in the USER_REQUIRE_INVITATION config variable with the comment "not yet implemented." I'm wondering if you are in the process of fleshing out this functionality or is it more of a wish list?

    As it stands right now I'm attempting to manually go in and generate this process. My plan is to utilize the password reset (user_manager.generate_token(), reset_password_link, User.reset_password_token, etc.) functionality that has already been created but send it to a custom view, email template, etc.

    Would you suggest this as the best course of action? The reason why I'm asking is if there is a plan to incorporate "user invitation" functionality, I would be more than willing to fork Flask-User and attempt to contribute.

    Awesome package btw, the customizability and readability of the package has been really great.

    Fixed and Released 
    opened by neurosnap 7
  • A bug when install gettext callables to jinja2 environment

    A bug when install gettext callables to jinja2 environment

    If the translation block in jinja2 templates contain an expression, like the following:

    {% trans %}Log in as {{username}} {% endtrans  %}
    

    the rendering process would throw an error saying invalid key.

    bug Fixed and Released 
    opened by lilac 7
  • Auto login after registration

    Auto login after registration

    Is there a setting to have the user automatically logged in once they register as opposed to redirecting them to the login page? Or, do I need to override the registration call to implement this myself?

    I looked through the documentation and didn't seem to find any configuration setting for such an action.

    Thanks!

    Feature request Fixed and Released 
    opened by sjohnson540 7
  • Installation Fails Because of __version__ Import (v0.6)

    Installation Fails Because of __version__ Import (v0.6)

    c88b376 tried to make things easier to manage by doing from flask_user import __version__ as flask_user_version in setup.py. However, that has an undesirable consequence: users who don't already have passlib installed could face an ImportError, preventing installation of Flask-User.

    To reproduce (ensure passlib is not already installed):

    $ pip install --no-cache-dir Flask-User==0.6.17
    Collecting Flask-User==0.6.17 (from -r requirements.txt (line 13))
      Downloading Flask-User-0.6.17.tar.gz (62kB)
        100% |████████████████████████████████| 71kB 6.0MB/s
        Complete output from command python setup.py egg_info:
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "/tmp/pip-build-c6f9o6kh/Flask-User/setup.py", line 5, in <module>
            from flask_user import __version__ as flask_user_version
          File "/tmp/pip-build-c6f9o6kh/Flask-User/flask_user/__init__.py", line 7, in <module>
            from passlib.context import CryptContext
        ImportError: No module named 'passlib'
    
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-c6f9o6kh/Flask-User/
    

    Note that if the packages are cached, it could also appear to work fine, which is why --no-cache-dir is needed.

    bug Fixed and Released 
    opened by StephenOrJames 6
  • BuildError werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'signinpage'. Did you mean 'loginagent' instead?

    BuildError werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'signinpage'. Did you mean 'loginagent' instead?

    BuildError werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'signinpage'. Did you mean 'loginagent' instead?

    Traceback (most recent call last) File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 2548, in call return self.wsgi_app(environ, start_response) File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 2528, in wsgi_app response = self.handle_exception(e) File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 2525, in wsgi_app response = self.full_dispatch_request() File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 1822, in full_dispatch_request rv = self.handle_user_exception(e) File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 1820, in full_dispatch_request rv = self.dispatch_request() File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 1796, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "C:\Users\varunaveem\Desktop\IBM-Project-1392-1658386621-main\Final_Deliverables\Customer Care Registry\app.py", line 30, in home return render_template('index.html',mes=message) File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\templating.py", line 147, in render_template return _render(app, template, context) File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\templating.py", line 130, in _render rv = template.render(context) File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\jinja2\environment.py", line 1301, in render self.environment.handle_exception() File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\jinja2\environment.py", line 936, in handle_exception raise rewrite_traceback_stack(source=source) File "C:\Users\varunaveem\Desktop\IBM-Project-1392-1658386621-main\Final_Deliverables\Customer Care Registry\templates\index.html", line 1, in top-level template code {% extends 'base.html' %} File "C:\Users\varunaveem\Desktop\IBM-Project-1392-1658386621-main\Final_Deliverables\Customer Care Registry\templates\base.html", line 61, in top-level template code {% block body %} File "C:\Users\varunaveem\Desktop\IBM-Project-1392-1658386621-main\Final_Deliverables\Customer Care Registry\templates\index.html", line 48, in block 'body' <span File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 2031, in url_for return self.handle_url_build_error(error, endpoint, values) File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 2020, in url_for rv = url_adapter.build( # type: ignore[union-attr] File "C:\Users\varunaveem\AppData\Local\Programs\Python\Python310\lib\site-packages\werkzeug\routing\map.py", line 917, in build raise BuildError(endpoint, values, method, self) werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'signinpage'. Did you mean 'loginagent' instead? The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error. To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.

    You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:

    dump() shows all variables in the frame dump(obj) dumps all that's known about the object

    opened by VarunaveeMuruganandham 0
  • Is there is a chance of upgrading to Bootstrap v5?

    Is there is a chance of upgrading to Bootstrap v5?

    I like Flask-User a lot it is amazing and saves me a lot of boilerplates.

    You have done a really great job here 👏.

    Nowadays when I create a project I use latest Bootstrap currently v5 and Flask-User uses Bootstrap v3.

    So I am forced to downgrade the project bootstrap version to v3 to avoid any conflicts.

    Any other solution I find in my little head 🐵 right now will bring another set of boilerplates 😅.

    So is there is a chance to upgrade to latest version or pointing me to a better idea.

    Thanks again for everything 😊.

    opened by mgonline86 1
  • Flask-User YANKED pypi

    Flask-User YANKED pypi

    Hello, First of all, congratulations for the excellent work on this project. We recently detected that the project on PyPi is listed as "Yanked". I have been reported that doing pip install Flask-User does not work due to the state of the project and the version number must be added to be able to install. On the other hand, a warning message is observed during the installation and a reason why the project is marked as Yanked is not indicated.

    yanked

    My questions are:

    1. What can we do to avoid the mentioned problems and continue using the module normally?
    2. Since when is the project marked as Yanked?
    3. Is this due to a bug in the module?
    4. Or is it because the project is no longer in active development and will be removed or deprecated?
    5. Should we look for an alternative project?

    Thank you very much

    Greetings, Mauro

    opened by maucm92 12
  • email_validator needed even when USER_ENABLE_EMAIL = False

    email_validator needed even when USER_ENABLE_EMAIL = False

    When USER_ENABLE_EMAIL is false, I would expect the email_validator to not be needed. It does not make sense to add this library when config explicitly states no e-mail related functionality should be used.

    opened by racinmat 0
  • refactor(package): enabling postopend init_app for all managers

    refactor(package): enabling postopend init_app for all managers

    While working on some projects, I've found out that Flask-User doesn't properly hold initialization without passed app, db and UserClass objects. And even if you want to firstly create UserManager and then init_app, you have to do smth like UserManager(app=None, ...), which looks inconsistent and odd.

    opened by avillia 0
  • "TypeError: 'Collection' object is not callable. If you meant to call the 'authenticate' method on a 'Database' object it is failing because no such method exists."

    Hello, apparently Flask-User is not compatible with newest pymongo (4.0).

    This is the error I get:

    "TypeError: 'Collection' object is not callable. If you meant to call the 'authenticate' method on a 'Database' object it is failing because no such method exists."
    

    You can read more about this: https://debugah.com/solved-typeerror-collection-object-is-not-callable-if-you-meant-to-call-the-authenticate-method-on-a-database-object-it-is-failing-because-no-such-method-exists-23011/

    opened by hakanu 1
Releases(v0.5.3)
This program automatically logs you into a Zoom session at your alloted time

This program automatically logs you into a Zoom session at your alloted time. Optionally you can choose to have end the session at your allotted time.

9 Sep 19, 2022
Django Auth Protection This package logout users from the system by changing the password in Simple JWT REST API.

Django Auth Protection Django Auth Protection This package logout users from the system by changing the password in REST API. Why Django Auth Protecti

Iman Karimi 5 Oct 26, 2022
python implementation of JSON Web Signatures

python-jws 🚨 This is Unmaintained 🚨 This library is unmaintained and you should probably use For histo

Brian J Brennan 57 Apr 18, 2022
Django CAS 1.0/2.0/3.0 client authentication library, support Django 2.0, 2.1, 2.2, 3.0 and Python 3.5+

django-cas-ng django-cas-ng is Django CAS (Central Authentication Service) 1.0/2.0/3.0 client library to support SSO (Single Sign On) and Single Logou

django-cas-ng 347 Dec 18, 2022
Flask user session management.

Flask-Login Flask-Login provides user session management for Flask. It handles the common tasks of logging in, logging out, and remembering your users

Max Countryman 3.2k Dec 28, 2022
Basic auth for Django.

easy-basicauth WARNING! THIS LIBRARY IS IN PROGRESS! ANYTHING CAN CHANGE AT ANY MOMENT WITHOUT ANY NOTICE! Installation pip install easy-basicauth Usa

bichanna 2 Mar 25, 2022
This app makes it extremely easy to build Django powered SPA's (Single Page App) or Mobile apps exposing all registration and authentication related functionality as CBV's (Class Base View) and REST (JSON)

Welcome to django-rest-auth Repository is unmaintained at the moment (on pause). More info can be found on this issue page: https://github.com/Tivix/d

Tivix 2.4k Jan 03, 2023
Phishing Abusing Microsoft 365 OAuth Authorization Flow

Microsoft365_devicePhish Abusing Microsoft 365 OAuth Authorization Flow for Phishing Attack This is a simple proof-of-concept script that allows an at

bigb0ss 11 Dec 11, 2022
REST implementation of Django authentication system.

djoser REST implementation of Django authentication system. djoser library provides a set of Django Rest Framework views to handle basic actions such

Sunscrapers 2.2k Jan 01, 2023
JSON Web Token Authentication support for Django REST Framework

REST framework JWT Auth JSON Web Token Authentication support for Django REST Framework Overview This package provides JSON Web Token Authentication s

Styria Digital Development 178 Jan 02, 2023
Flask App With Login

Flask App With Login by FranciscoCharles Este projeto basico é o resultado do estudos de algumas funcionalidades do micro framework Flask do Python. O

Charles 3 Nov 14, 2021
Multi-user accounts for Django projects

django-organizations Summary Groups and multi-user account management Author Ben Lopatin (http://benlopatin.com) Status Separate individual user ident

Ben Lopatin 1.1k Jan 02, 2023
Luca Security Concept

Luca Security Concept This is the document source of luca's security concept. Please go here for the HTML version: https://luca-app.de/securityconcept

luca 43 Oct 22, 2022
A simple Boilerplate to Setup Authentication using Django-allauth 🚀

A simple Boilerplate to Setup Authentication using Django-allauth, with a custom template for login and registration using django-crispy-forms.

Yasser Tahiri 13 May 13, 2022
Social auth made simple

Python Social Auth Python Social Auth is an easy-to-setup social authentication/registration mechanism with support for several frameworks and auth pr

Matías Aguirre 2.8k Dec 24, 2022
Library - Recent and favorite documents

Thingy Thingy is used to quickly access recent and favorite documents. It's an XApp so it can work in any distribution and many desktop environments (

Linux Mint 23 Sep 11, 2022
A wagtail plugin to replace the login by an OAuth2.0 Authorization Server

Wagtail OAuth2.0 Login Plugin to replace Wagtail default login by an OAuth2.0 Authorization Server. What is wagtail-oauth2 OAuth2.0 is an authorizatio

Gandi 7 Oct 07, 2022
Per object permissions for Django

django-guardian django-guardian is an implementation of per object permissions [1] on top of Django's authorization backend Documentation Online docum

3.3k Jan 01, 2023
Graphical Password Authentication System.

Graphical Password Authentication System. This is used to increase the protection/security of a website. Our system is divided into further 4 layers of protection. Each layer is totally different and

Hassan Shahzad 12 Dec 16, 2022
Django Admin Two-Factor Authentication, allows you to login django admin with google authenticator.

Django Admin Two-Factor Authentication Django Admin Two-Factor Authentication, allows you to login django admin with google authenticator. Why Django

Iman Karimi 9 Dec 07, 2022