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)
Out-of-the-box support register, sign in, email verification and password recovery workflows for websites based on Django and MongoDB

Using djmongoauth What is it? djmongoauth provides out-of-the-box support for basic user management and additional operations including user registrat

hao 3 Oct 21, 2021
:couple: 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 09, 2023
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
Djagno grpc authentication service with jwt auth

Django gRPC authentication service STEP 1: Install packages pip install -r requirements.txt STEP 2: Make migrations and migrate python manage.py makem

Saeed Hassani Borzadaran 3 May 16, 2022
Authentication for Django Rest Framework

Dj-Rest-Auth Drop-in API endpoints for handling authentication securely in Django Rest Framework. Works especially well with SPAs (e.g React, Vue, Ang

Michael 1.1k Jan 03, 2023
A JSON Web Token authentication plugin for the Django REST Framework.

Simple JWT Abstract Simple JWT is a JSON Web Token authentication plugin for the Django REST Framework. For full documentation, visit django-rest-fram

Jazzband 3.2k Dec 28, 2022
Toolkit for Pyramid, a Pylons Project, to add Authentication and Authorization using Velruse (OAuth) and/or a local database, CSRF, ReCaptcha, Sessions, Flash messages and I18N

Apex Authentication, Form Library, I18N/L10N, Flash Message Template (not associated with Pyramid, a Pylons project) Uses alchemy Authentication Authe

95 Nov 28, 2022
蓝鲸用户管理是蓝鲸智云提供的企业组织架构和用户管理解决方案,为企业统一登录提供认证源服务。

蓝鲸用户管理 简体中文 | English 蓝鲸用户管理是蓝鲸智云提供的企业组织架构和用户管理解决方案,为企业统一登录提供认证源服务。 总览 架构设计 代码目录 功能 支持多层级的组织架构管理 支持通过多种方式同步数据:OpenLDAP、Microsoft Active Directory(MAD)

腾讯蓝鲸 35 Dec 14, 2022
Django server for Travel Mate (Project: nomad)

Travel Mate Server (Project: Nomad) Django 2.0 server for Travel Mate Contribute For new feature request in the app, open a new feature request on the

Travel Mate 41 May 29, 2022
PetitPotam - Coerce NTLM authentication from Windows hosts

Python implementation for PetitPotam

ollypwn 137 Dec 28, 2022
A Python library to create and validate authentication tokens

handshake A Python library to create and validate authentication tokens. handshake is used to generate and validate arbitrary authentication tokens th

0 Apr 26, 2022
🔐 Login & Register System

🔐 Login & Register System This is a developable login and register system. Enter your username and password to register or login to account. Automati

Firdevs Akbayır 10 Dec 12, 2022
FastAPI Simple authentication & Login API using GraphQL and JWT

JeffQL A Simple FastAPI authentication & Login API using GraphQL and JWT. I choose this Name JeffQL cause i have a Low level Friend with a Nickname Je

Yasser Tahiri 26 Nov 24, 2022
A Python inplementation for OAuth2

OAuth2-Python Discord Inplementation for OAuth2 login systems. This is a simple Python 'app' made to inplement in your programs that require (shitty)

Prifixy 0 Jan 06, 2022
Local server that gives you your OAuth 2.0 tokens needed to interact with the Conta Azul's API

What's this? This is a django project meant to be run locally that gives you your OAuth 2.0 tokens needed to interact with Conta Azul's API Prerequisi

Fábio David Freitas 3 Apr 13, 2022
Cack facebook tidak login

Cack facebook tidak login

Angga Kurniawan 5 Dec 12, 2021
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
FastAPI-Login tries to provide similar functionality as Flask-Login does.

FastAPI-Login FastAPI-Login tries to provide similar functionality as Flask-Login does. Installation $ pip install fastapi-login Usage To begin we hav

417 Jan 07, 2023
A JOSE implementation in Python

python-jose A JOSE implementation in Python Docs are available on ReadTheDocs. The JavaScript Object Signing and Encryption (JOSE) technologies - JSON

Michael Davis 1.2k Dec 28, 2022
Ready-to-use and customizable users management for FastAPI

FastAPI Users Ready-to-use and customizable users management for FastAPI Documentation: https://frankie567.github.io/fastapi-users/ Source Code: https

François Voron 2.4k Jan 04, 2023