Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
— |
programmazione:python:bottle:semplice_autenticazione_con_i_cookie [12/02/2019 - 12:20] (versione attuale) Fabio Di Matteo creata |
||
---|---|---|---|
Linea 1: | Linea 1: | ||
+ | ====== Semplice autenticazione basata su cookie in Bottle (Python) ====== | ||
+ | Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 12/02/2019 - 12:18 //** // // | ||
+ | Come da titolo una semplice autenticazione basata sui cookie. | ||
+ | |||
+ | <code python> | ||
+ | #!/usr/bin/env python3 | ||
+ | import os | ||
+ | from bottle import Bottle,route, run, template, static_file, request, response,get, post | ||
+ | |||
+ | COOKIESECRET="blablablasecret" | ||
+ | USERNAME="fabio" | ||
+ | PASSWORD="fabio" | ||
+ | |||
+ | |||
+ | |||
+ | def start_server(): | ||
+ | run(host='0.0.0.0', port=8080) | ||
+ | |||
+ | # Ogni file deve avere una rotta | ||
+ | @route('/js/<filename>') | ||
+ | def send_js(filename): | ||
+ | return static_file(filename, root=os.path.dirname(os.path.realpath(__file__))+'/html/js/') | ||
+ | |||
+ | @route('/css/<filename>') | ||
+ | def send_css(filename): | ||
+ | return static_file(filename, root=os.path.dirname(os.path.realpath(__file__))+'/html/css/') | ||
+ | |||
+ | @route('/img/<filename>') | ||
+ | def send_img(filename): | ||
+ | return static_file(filename, root=os.path.dirname(os.path.realpath(__file__))+'/html/img/') | ||
+ | |||
+ | |||
+ | # Form per il login | ||
+ | @route('/login') | ||
+ | def login(): | ||
+ | formlogin=open(os.path.dirname(os.path.realpath(__file__))+"/html/login.html").read() | ||
+ | return formlogin | ||
+ | |||
+ | # Ricavo username/password dal form e li salvo sui cookie, poi rendirizzo sulla home page | ||
+ | # dove avverra' il controllo delle credenziali tramite "checkLogin()" | ||
+ | @route('/dologin', method='POST') | ||
+ | def dologin(): | ||
+ | username = request.forms.get('username') | ||
+ | password = request.forms.get('password') | ||
+ | print("Login: %s/%s" % (username, password)) | ||
+ | |||
+ | response.set_cookie("username", username , secret=COOKIESECRET) | ||
+ | response.set_cookie("password", password, secret=COOKIESECRET) | ||
+ | |||
+ | response.status = 303 | ||
+ | response.set_header('Location', '/') | ||
+ | |||
+ | |||
+ | # Svuoto i cookies e rendirizzo alla homepage, | ||
+ | # dove avverra' il controllo delle credenziali tramite "checkLogin()" | ||
+ | @route ('/logout') | ||
+ | def logout(): | ||
+ | response.set_cookie("username", "") | ||
+ | response.set_cookie("password","") | ||
+ | response.status = 303 | ||
+ | response.set_header('Location', '/') | ||
+ | |||
+ | # Si occupa di controllare il nome utente e la password salvate su dei cookie. | ||
+ | # Qualora non fossero corretti rendirizza al form di login | ||
+ | def checkLogin(): | ||
+ | username= request.get_cookie("username", secret=COOKIESECRET) | ||
+ | password= request.get_cookie("password", secret=COOKIESECRET) | ||
+ | |||
+ | if (username==USERNAME and password==PASSWORD): | ||
+ | print("Riconosciuto") | ||
+ | return True | ||
+ | else: | ||
+ | print("Non riconosciuto") | ||
+ | response.status = 303 | ||
+ | response.set_header('Location', 'login') | ||
+ | return False | ||
+ | |||
+ | |||
+ | # Rotta per la homepage. | ||
+ | # Controlla le credenziali e se sono corrette mostra il serve "html/index.html" | ||
+ | @route('/') | ||
+ | def home(): | ||
+ | checkLogin() | ||
+ | homepage=open(os.path.dirname(os.path.realpath(__file__))+"/html/index.html").read() | ||
+ | return homepage | ||
+ | |||
+ | |||
+ | # Avvia il webserver | ||
+ | start_server() | ||
+ | |||
+ | # Se vogliamo avviare la nostra app su pythoneverywhere.com disabilitiamo "start_server()" | ||
+ | # e abilitiamo: | ||
+ | |||
+ | # application = default_app() | ||
+ | |||
+ | |||
+ | |||
+ | </code> |
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.