User authentication in Flask

27 Views Asked by At

I am a complete beginner with using Flask and I am having trouble authenticating my user when they sign in to my website. I am using JSON request methods to get the user info from the login model and am receiving a 'login successful' message from the server after they log in.

However, when I try to access a route that uses the @login_required decorator, it says I do not have access to the URL.

    def load_user(user_id):
    return User.query.get(int(user_id))

    @app.route('/', methods=["GET", "POST"])
    def register():
        if request.method == "POST":
            action = request.json.get('action')
            if action == 'register':
            # Registration logic
            username = request.json.get('username')
            first_name = request.json.get('first_name')
            last_name = request.json.get('last_name')
            email = request.json.get('email')
            password = request.json.get('password')

            # Validate form values
            if not username or not first_name or not last_name or not email or not password:
                return jsonify(message="Please fill in all fields"), 400

            # Check if username or email already exists
            username_exists = User.query.filter_by(username=username).first()
            if username_exists:
                return jsonify(message="This username already exists"), 400

            email_exists = User.query.filter_by(email=email).first()
            if email_exists:
                return jsonify(message="This email is already registered"), 400

            # Create a new user
            password_hash = generate_password_hash(password)
            new_user = User(username=username, first_name=first_name, last_name=last_name, 
            email=email,     password_hash=password_hash)
            db.session.add(new_user)
            db.session.commit()

            return jsonify(message="Sign up successful")

        elif action == 'login':
            # Login logic
            username = request.json.get('username')
            password = request.json.get('password')

            print(f"Received username: {username}")
            print(f"Received password: {password}")

            user = User.query.filter_by(username=username).first()

            if user and check_password_hash(user.password_hash, password):
                login_user(user)
                flash('You are now logged in!')
                return jsonify(message="Login successful")

            flash("Incorrect login information! Try again")
            return jsonify(message="Login failed")

0

There are 0 best solutions below