Код: Выделить всё
def main(page: ft.Page):
theme = ft.Theme()
theme.page_transitions.macos = ft.PageTransitionTheme.NONE
page.theme = theme
page.bgcolor="#202020"
supabase: Client = get_supabase_object()
create: ft.View = CreatePage(page, supabase)
login: ft.View = LogInPage(page, supabase)
reset_password: ft.View = ResetPasswordPage(page, supabase)
update_password: ft.View = UpdatePasswordPage(page, supabase)
main_view: MainPage = MainPage(page, supabase)
# router method
def route_change (route)-> None:
page.views.clear()
if page.route == create.route:
page.views.append(create)
if page.route == login.route:
page.views.append(login)
if page.route == reset_password.route:
page.views.append(reset_password)
if page.route == update_password.route:
page.views.append(update_password)
if page.route == main_view.route:
page.views.append(main_view)
page.update()
page.on_route_change = route_change
page.go(create.route)
Код: Выделить всё
class ResetPasswordPage(ft.View):
def __init__(self, page: ft.Page, supabase: Client) -> None:
super().__init__(
route="/reset_password",
vertical_alignment="center",
horizontal_alignment="center",
)
self.page = page
self.supabase = supabase
self.body = Body(
title="Supabase - Reset Password",
btn_name = "Reset password",
function = self.reset_password,
contains_password=False,
)
self.controls = [self.body]
def reset_password(self, event=None) -> None:
email = self.body.email.value
if email:
try:
self.supabase.auth.reset_password_for_email(email, {"redirect_to": "http://localhost:3000/update_password"},)
show_snackbar(self.page, "Password reset email sent! Please check your inbox.", color="#55a271")
except Exception as e:
show_snackbar(self.page, f"Failed to send reset email: {str(e)}", color="#e57373")
else:
show_snackbar(self.page, "Please insert your email", color="#e57373")
Код: Выделить всё
class UpdatePasswordPage(ft.View):
def __init__(self, page: ft.Page, supabase: Client) -> None:
super().__init__(
route="/update_password",
vertical_alignment="center",
horizontal_alignment="center",
)
self.page = page
self.supabase = supabase
# Estrai il token dalla query string
self.token = self.page.route.split("?token=")[1] if "?token=" in self.page.route else None
if self.token:
print(self.token)
self.controls = [ft.Text("Valid token.")]
else:
self.controls = [ft.Text("Invalid or expired token.")]
########################################
########################################
# AT THIS TIME, IMPLEMENTED BUT NOT USED
########################################
########################################
def update_password(self, event=None) -> None:
new_password = self.controls[1].value
if self.token:
try:
# Usa Supabase per aggiornare la password con il token
self.supabase.auth.update_user(self.token, password=new_password)
show_snackbar(self.page, "Password updated successfully!")
self.page.route = "/login"
except Exception as e:
show_snackbar(self.page, f"Error: {e}")
else:
show_snackbar(self.page, "Invalid token!")
Код: Выделить всё
ft.app(target=main, port=3000, view=ft.AppView.WEB_BROWSER)
Код: Выделить всё
flet run -w --port 3000 projectName
Проблема связана с этапом перенаправления. Как только пользователь на странице входа в систему нажимает на кнопку сброса пароля, страница обновления пароля появляется менее чем на секунду (на самом деле я видел только изменение URL-адреса), и я сразу же перенаправляюсь на первую страницу (страницу регистрации) без каких-либо ошибок или исключений. Кажется, у меня нет прав доступа к странице обновления. Более того, я проверяю, что токен, отправленный по электронной почте, правильно извлечен из URL-адреса (распечатайте его в консоли). Чего мне не хватает?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -already-r