pythonflaskflask-httpauth

Check if Flask-HTTPAuth is authenticated inside view


I'm using Flask-HTTPAuth for authentication. I want to display different data from a view depending on if the request was authenticated or not. Decorating the view with auth.login_required only shows it to authenticated users. How can I test if the request was authenticated with Flask-HTTPAuth?

auth = HTTPBasicAuth()

@app.route("/clothesInfo")
@auth.login_required
def show_info():
    return jsonify(blah blah blah)

Solution

  • What you want is actually very easy to implement. In your verify_password callback, you will get username and password set to '' when the user does not provide credentials. You can still return True from that function, and that will allow the anonymous user to access the endpoint.

    The following example demonstrates this technique:

    auth = HTTPBasicAuth()
    
    @auth.verify_password
    def verify_password(username, password):
        if username == '' or password == '':
            # anonymous user, we still let them in
            g.current_user = None
            return True
        g.current_user = my_verify_function(username, password)
        return g.current_user is not None
    
    @app.route("/clothesInfo")
    @auth.login_required
    def show_info():
        if g.current_user:
            # prepare data for authenticated users here
            pass
        else:
            # prepare data for anonymous users here
            pass
        return jsonify(data)