The example code here seems wonky to me:
@anvil.server.callable
def login_with_password(username, password):
user = app_tables.users.get(username=username)
if user is not None and \
bcrypt.hashpw(password, user['password_hash']).decode() == user['password_hash']:
anvil.users.force_login(user)
return user
Shouldn’t it be something like:
import bcrypt
@anvil.server.callable
def login_with_password(username, password):
user = app_tables.users.get(email=username)
if (user is not None) and \
bcrypt.checkpw(password.encode('utf-8'), user['password_hash'].encode('utf-8')):
anvil.users.force_login(user)
return user
else:
return None