saurabhwadekar / flet_route

Simplest way of flet routing
MIT License
55 stars 3 forks source link

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

Closed bobwatcherx closed 1 year ago

bobwatcherx commented 1 year ago

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
            )
        ]
        )
saurabhwadekar commented 1 year ago

please provide requires.txt