You could solve this by using “date” in the database.
E.g field name temp-password (date) the date sets when you send the user´s temp password, and if the date is more then 24 old or w/e, then you redirect the user to reset_pw page/popup.
If the password is reset/changed by the user, you remove the date field, making it empty.
This is one solution, don´t know if it the best, but it work´s just fine for me.
There is a temp password feature in bubble. In the workflow, choose Account > Assign temp password. Normally I use the email action to send them the temp password.
@JustinC i don’t believe they expire by default, but this is quickly doable with a date field in the database table. So when sending an email with the temp password, the workflow would include temp-password’s expiration date=current date/time+ 2hrs or something to that nature.