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")