2017-06-16 103 views
1

用于登录的Flask/python验证不适用于我的mysql,我正在搜索google和文档,并且在同一件事物上看到了有关堆栈溢出的几个问题,但尚未得到解答。如何使用mysql验证flask/python中的凭证?

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") 

有一种简单的方法来验证在MySQL凭据没有框架

+1

我看你已将密码保存在数据库中,请保存密码哈希值。 '从werkzeug.security导入generate_password_hash,check_password_hash'。 – Ejaz

回答

0

这不是一个完整的答案(即给出了你应该做的为您解决问题的代码示例),而一些建议:

您正在使用带有数据库的瓶子,但没有使用瓶子扩展名,例如flask-sqlalchemmy,这是一个使SQLAlchemy(数据库工具包)更易于与python一起使用的库。有了像flask-login(它可以处理登录和注销以及常见的“记住我”功能),您尝试执行的操作非常简单。 如果您希望通过使用flask-sqlalchemy和flask-login检查数据库中的凭据来处理用户日志记录的示例文件,我可以创建一个,但有很多使用这些工具的应用程序示例。使用数据库工具包,比如我刚才提到的数据库工具包,还有很多其他的优点,其中最少的就是数据库系统的可移植性(使用sqlalchemy的代码通常可以工作在多个数据库后端,比如mysql,postgreSQL,sqlite等) 。