如何使用 mysql 验证烧瓶/python 中的凭据?
Posted
技术标签:
【中文标题】如何使用 mysql 验证烧瓶/python 中的凭据?【英文标题】:how to validate credentials in flask/python with mysql? 【发布时间】:2017-11-18 15:17:21 【问题描述】:用于登录的 Flask/python 验证不适用于 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")
有没有一种简单的方法可以在没有框架的情况下在 MySQL 中验证凭据
【问题讨论】:
我看到您已将密码保存在数据库中,请保存密码哈希。from werkzeug.security import generate_password_hash, check_password_hash
.
【参考方案1】:
这不是一个完整的答案(给出了解决问题的代码示例),而是一些建议:
您正在使用带有数据库的flask,但没有使用诸如flask-sqlalchemmy 之类的flask 扩展,这是一个使SQLAlchemy(数据库工具包)更易于与python 一起使用的库。使用flask-login 之类的东西(它处理登录和注销以及常见的“记住我”功能),您尝试做的事情非常简单。 如果您想要一个示例文件,通过使用 flask-sqlalchemy 和 flask-login 从数据库检查用户的凭据来处理登录用户,我可以制作一个,但是周围有很多使用这些工具的应用程序示例。
使用像我提到的那样的数据库工具包还有很多其他优点,其中最不重要的是数据库系统的可移植性(使用 sqlalchemy 的代码通常可以在多个数据库后端(如 mysql、postgreSQL、sqlite 等)上工作)。
【讨论】:
以上是关于如何使用 mysql 验证烧瓶/python 中的凭据?的主要内容,如果未能解决你的问题,请参考以下文章