saurabhwadekar/flet_route

page.client_storage and page.session not work in screens view

Closed this issue · 1 comments

i created a login with the page page which is in the screens folder. I have set the value in page.client_storage and session storage. but when you get the data it's actually None . What is wrong . i wanto logout for remove login key in client storage in session storage but value always None

from flet import *
from flet_route import Routing,path
from screens.login import LoginView
from screens.register import RegisterView
from screens.dashboard import DashboardView

def main(page:Page):
    my_routes = [
        path(
            url="/register",
            clear=True,
            view=RegisterView
            ),
        path(
            url="/login",
            clear=True,
            view=LoginView
            ),
        path(
            url="/dashboard",
            clear=True,
            view=DashboardView
            ),
    ]
    check_login_session = page.client_storage.get("login")
    print(check_login_session)
    Routing(page=page,app_routes=my_routes)
    if check_login_session == None:
        page.go("/login")
        page.update()
    else:
        page.go("/dashboard")
        page.update()

    page.go(page.route)

flet.app(target=main)

file screens/login.py

from flet import *
from flet_route import Params,Basket
import random
import string
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from myconnect import mycursor,mydb


def LoginView(page:Page,params:Params,basket:Basket):
	nametxt = TextField(label="email")
	passwordtxt = TextField(label="password")


	def is_email_verified(email):
	    mycursor.execute("SELECT is_verified FROM users WHERE email = %s", (nametxt.value,))
	    result = mycursor.fetchone()
	    if result[0] == 1:
	        return True
	    else:
	        return False

	def loginprocess(e):
		mycursor.execute("SELECT * FROM users WHERE email = %s AND password = %s", (nametxt.value, passwordtxt.value))
		result = mycursor.fetchone()
		get_token = result[4]

		if not result:
			print("Email atau password salah")
			page.snack_bar = SnackBar(
				Text("Wrong email password",size=30),
				bgcolor="red"
				)
			page.snack_bar.open = True
			page.update()
			return
		elif not is_email_verified(nametxt.value):
			print("Email belum terverifikasi")
			page.snack_bar = SnackBar(
				Text("you email not verified",size=30),
				bgcolor="red"
				)
			page.snack_bar.open = True
			page.update()
			return
		
		print("Anda sudah di dashboard")
		page.go("/dashboard")
		page.client_storage.set("login",get_token)
		page.update()

	return View(
		"/login",
		controls=[
			Text("you login page",size=30,weight="bold"),
			nametxt,
			passwordtxt,
			ElevatedButton("login Now",
				bgcolor="green",color="white",
				on_click=loginprocess
				),
			Row([
			TextButton("no have account,register",
				on_click=lambda e:page.go("/register")
				)
				],alignment="center")
			]
		)

file screens/register.py

from flet import *
from flet_route import Params,Basket
import random
import string
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

from myconnect import mycursor,mydb

def RegisterView(page:Page,params:Params,basket:Basket):
	nametxt = TextField(label="email")
	passwordtxt = TextField(label="password")


	def send_verification_email(email, token):
	    subject = "Verifikasi Email"
	    body = "Klik link berikut untuk melakukan verifikasi email: http://localhost:5000/verify_email?token=" + token + "&email=" + email

	    message = MIMEMultipart()
	    message['From'] = "noreply@myapp.com"
	    message['To'] = email
	    message['Subject'] = subject
	    message.attach(MIMEText(body, 'plain'))

	    # koneksi ke SMTP server Mailtrap dan kirim email
	    with smtplib.SMTP('smtp.mailtrap.io', 2525) as smtp:
	        smtp.login("27b3da367addfa", "bc4d9ff24e96cb")
	        smtp.sendmail("noreply@myapp.com", email, message.as_string())

	def generate_token():
	    letters = string.ascii_letters
	    return ''.join(random.choice(letters) for i in range(10))


	def registerprocess(e):
		mycursor.execute("SELECT * FROM users WHERE email = %s", (nametxt.value,))
		result = mycursor.fetchone()
		if result:
			print("Email sudah terdaftar")
			return
		token = generate_token()
		sql = "INSERT INTO users (email, password, verification_token) VALUES (%s, %s, %s)"
		val = (nametxt.value, passwordtxt.value, token)
		mycursor.execute(sql, val)
		mydb.commit()
		send_verification_email(nametxt.value, token)
		print("Registrasi berhasil, silakan cek email untuk verifikasi")
		page.snack_bar = SnackBar(
			Text("Send Email Verification",size=30),
			bgcolor="blue"
			)
		page.snack_bar.open = True
		nametxt.value = ""
		passwordtxt.value = ""
		page.update()


	return View(
		"/register",
		controls=[
			Text("you register ",size=30,weight="bold"),
			nametxt,
			passwordtxt,
			ElevatedButton("Register my account",
			bgcolor="blue",color="white",
			on_click=registerprocess
				),
			ElevatedButton("Login Now",
			bgcolor="orange",color="white",
			on_click=lambda e:page.go("/login")
				)
			]
		)

file screens/dashboard.py

from flet import *
from flet_route import Params,Basket

def DashboardView(page:Page,params:Params,basket:Basket):
	page.bgcolor="green"
	check_login_session = page.client_storage.get("login")
	print("hasil",check_login_session)
	if check_login_session == None:
		page.go("/login")
		page.update()

	def logoutnow(e):
		page.client_storage.remove("login")
		page.go("/login")
		page.update()

	return View(
		"/dashboard",
		controls=[
		Text("You In Dashboard",size=30,weight="bold",
			),
		ElevatedButton("logout",
			bgcolor="red",color="white",
			on_click=logoutnow
			)
		]
		)

please provide requires.txt