如何将bcrypt hashpw结果正确存储在数据库中?

问题描述 投票:0回答:1

我正在创建登录系统。我使用python flaskProstgresql作为数据库。

我认为我只是将哈希值存储错误。到目前为止,我已经将其保存为vachar 255

我的代码:

from flask import Flask, render_template, redirect, request, url_for, session
from flask_sqlalchemy import SQLAlchemy
import bcrypt
import psycopg2

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:PostGreSQL_13@localhost/test'
sql = SQLAlchemy(app)

@app.route('/')
def home():
    return render_template("home.html")

@app.route('/register', methods=["GET","POST"])
def register():
    if request.method == "GET":
        return render_template("register.html")
    else:
        name = request.form['name']
        email = request.form['email']
        password = request.form['password'].encode('utf-8')
        hash_password = bcrypt.hashpw(password, bcrypt.gensalt())

        t_host = 'localhost'
        t_port = "5432"
        t_dbname = "test"
        t_user = "postgres"
        t_pw = "password"

        db_conn = psycopg2.connect(host=t_host, port=t_port, dbname=t_dbname, user=t_user, password=t_pw)
        db_cursor = db_conn.cursor()

        db_cursor.execute("INSERT INTO users (UserName,UserEmail,UserPassword) VALUES (%s,%s,%s)",(name,email,hash_password,))
        db_conn.commit()

        session['name'] = name
        session['email'] = email
        return redirect(url_for("home"))



@app.route('/login', methods=["GET","POST"])
def login():
    if request.method == "POST":
        email = request.form['email']
        password = request.form['password'].encode('utf-8')

        t_host = 'localhost'
        t_port = "5432"
        t_dbname = "test"
        t_user = "postgres"
        t_pw = "password"

        db_conn = psycopg2.connect(host=t_host, port=t_port, dbname=t_dbname, user=t_user, password=t_pw)
        db_cursor = db_conn.cursor()

        db_cursor.execute("SELECT username, useremail, userpassword FROM users WHERE useremail=%s",(email,))

        user = db_cursor.fetchone()
        db_conn.close()

        if len(user) > 0:
            name = user[0]
            if bcrypt.hashpw(password, user[2].encode('utf-8')) == user[2].encode('utf-8'):
                session['name'] = user[0]
                session['email'] = user[1]
                return render_template("home.html")

        else:
            return "Versuch es doch Nochmal"
    else:
        return render_template("login.html")



@app.route('/logout')
def logout():
    session.clear()
    return render_template("home.html")

if __name__ == '__main__':
    app.secret_key = '012#!ApaAjaBoleh)(*^%'
    app.run(debug=True)

我从YouTube视频中获得的过程。请参阅附件。

我需要一个登录系统,这是向我推荐的,它运行良好。

最后一个必须以某种方式工作,如果可以,我会非常高兴。

谁能告诉我我在做什么错,或者我的数据库附录是对还是错?

postgresql bcrypt
1个回答
0
投票

我对您使用的这种语言一无所知,但是任何bcrypt实现都会输出类似于以下的字符串:

$2a$12$ieXy2Rj/TEGqVRx0JihGFesujNFCdmlQWpUaTNvwQ0XuB3lzOcTWK

是,您应该将该varchar字符串存储在数据库中。

© www.soinside.com 2019 - 2024. All rights reserved.