2017-06-16 3 views
1

La validation de flask/python pour la connexion ne fonctionne pas pour moi avec mysql, je cherchais google et documentations et j'ai vu quelques questions sur stack-overflow sur la même chose mais n'ont pas encore reçu de réponse.comment valider les informations d'identification dans flask/python avec mysql?

from flask import Flask, render_template, flash, request, url_for, redirect, session 
from content_management import Content 

#form validations 
from wtforms import Form, BooleanField, TextField, PasswordField, validators 
#to encrypt the password 
from passlib.hash import sha256_crypt 
#for SQL injection 
from MySQLdb import escape_string as thwart 
import gc 
from functools import wraps 
from mysql_connect import connection 

app = Flask(__name__) 

@app.route('/login/', methods=['GET','POST']) 
def login_page(): 
    error = '' 
    try: 
     c, conn = connection() 
     if request.method == "POST": 
      d = c.execute("SELECT * FROM clients WHERE email = (%s)", (thwart(request.form['email']),)) 
      d = c.fetchone()[2] 

      if request.form['password'] == d: 
       email = request.form['email'] 
       c.execute("SELECT * FROM clients WHERE email = (%s)", (thwart(email),)) 
       clients_table = c.fetchall() 
       clientcid = clients_table[0] 
       flash(clientcid) 
       phone = clients_table[1] 
       rating = clients_table[4] 
       conn.commit() 

       c.execute("SELECT * FROM cpersonals WHERE cid = (%s)", (clientcid,)) 
       cpersonals_table = c.fetchall() 
       first_name = cpersonals_table[1] 
       last_name = cpersonals_table[2] 
       address = cpersonals_table[3] 
       czip = cpersonals_table[4] 
       reg_date = cpersonals_table[5] 
       conn.commit() 

       c.close() 
       conn.close() 

       session['logged_in'] = 'client' 
       session['clientcid'] = clientcid 
       session['email'] = email 
       session['phone'] = phone 
       session['rating'] = rating 
       session['first_name'] = first_name 
       session['last_name'] = last_name 
       session['address'] = address 
       session['czip'] = czip 
       session['reg_date'] = reg_date 
       flash("You are now logged in.") 
       return redirect(url_for("dashborad")) 

      else: 
       error = "Invalid credentials, try again." 

     return render_template("login.html") 

est-il un moyen facile de valider les informations d'identification dans MySQL sans cadres

+1

Je vois que vous avez enregistré le mot de passe dans la base de données, s'il vous plaît enregistrer les hachages de mot de passe. 'à partir de werkzeug.security import generate_password_hash, check_password_hash'. – Ejaz

Répondre

0

Ce n'est pas une réponse complète (qui donne des exemples de code de ce que vous devez faire pour résoudre votre problème), plutôt quelques suggestions :

Vous utilisez une base de données avec flacon mais pas en utilisant une extension de flacon tel que flask-sqlalchemmy, qui est une bibliothèque qui fait SQLAlchemy (une boîte à outils de base de données) plus facile à utiliser avec python. Avec quelque chose comme flask-login (qui gère la connexion et la déconnexion, ainsi que la caractéristique commune "se souvenir de moi"), ce que vous essayez de faire est assez facile. Si vous souhaitez un exemple de fichier qui gère la journalisation d'un utilisateur en vérifiant ses informations d'identification à partir d'une base de données en utilisant flask-sqlalchemy et flask-login, il existe de nombreux exemples d'applications utilisant ces outils. L'utilisation d'une boîte à outils de base de données comme celle que j'ai mentionnée présente de nombreux autres avantages, notamment la portabilité du système de base de données (le code utilisant sqlalchemy fonctionnera généralement sur plusieurs bases de données comme mysql, postgreSQL, sqlite, etc.) .