generate_password_hash
时间: 2023-04-28 09:05:56 浏览: 74
generate_password_hash是一个Python库中的函数,用于生成密码的哈希值。它可以将一个明文密码转换为一个不可逆的哈希值,以增加密码的安全性。这个函数可以用于用户注册、登录等场景中,以保护用户的密码安全。
相关问题
check_password_hash返回false
`check_password_hash` 是一个用于验证密码哈希值的函数,通常用于身份验证系统中。当你使用 `check_password_hash` 函数来验证密码时,如果哈希值与给定的密码不匹配,它会返回 `False`。
以下是一个使用 `check_password_hash` 函数的示例:
```python
from werkzeug.security import generate_password_hash, check_password_hash
# 假设用户的密码哈希值存储在数据库中
stored_hash = generate_password_hash("password123")
# 要验证的密码
password = "password123"
# 检查密码是否匹配
if check_password_hash(stored_hash, password):
print("密码正确")
else:
print("密码错误")
```
请确保在使用 `check_password_hash` 函数之前,你已经正确地生成了密码的哈希值,并将其保存在数据库中。
import pymysql from flask import Flask, jsonify, request from flask_cors import CORS from werkzeug.security import check_password_hash, generate_password_hash import jwt from datetime import datetime, timedelta app = Flask(__name__) CORS(app) # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8mb4') # 登录接口 @app.route('/customer/open/user/login1', methods=['POST']) def login(): # 解析请求参数 user_phone = request.json.get('userPhone') user_password = request.json.get('userPassword') # 查询数据库,判断用户是否存在 cursor = conn.cursor() sql = "SELECT * FROM t_user_info WHERE user_phone=%s" cursor.execute(sql, user_phone) user = cursor.fetchone() if not user: return jsonify({'code': 400, 'msg': '用户不存在'}) # 验证密码是否正确 if not check_password_hash(user[2], user_password): return jsonify({'code': 400, 'msg': '密码错误'}) # 生成token payload = { 'user_id': user[0], 'exp': datetime.utcnow() + timedelta(days=1) } token = jwt.encode(payload, 'secret', algorithm='HS256').decode('utf-8') # 返回响应 return jsonify({'code': 200, 'msg': '登录成功', 'data': {'token': token}}) if __name__ == '__main__': app.run(debug=True)写上注释
好的,以下是注释版本的代码:
```python
import pymysql
from flask import Flask, jsonify, request
from flask_cors import CORS
from werkzeug.security import check_password_hash, generate_password_hash
import jwt
from datetime import datetime, timedelta
app = Flask(__name__)
CORS(app)
# 连接数据库
conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8mb4')
# 登录接口
@app.route('/customer/open/user/login1', methods=['POST'])
def login():
# 解析请求参数
user_phone = request.json.get('userPhone')
user_password = request.json.get('userPassword')
# 查询数据库,判断用户是否存在
cursor = conn.cursor()
sql = "SELECT * FROM t_user_info WHERE user_phone=%s"
cursor.execute(sql, user_phone)
user = cursor.fetchone()
if not user:
return jsonify({'code': 400, 'msg': '用户不存在'})
# 验证密码是否正确
if not check_password_hash(user[2], user_password):
return jsonify({'code': 400, 'msg': '密码错误'})
# 生成token
payload = {
'user_id': user[0],
'exp': datetime.utcnow() + timedelta(days=1)
}
token = jwt.encode(payload, 'secret', algorithm='HS256').decode('utf-8')
# 返回响应
return jsonify({'code': 200, 'msg': '登录成功', 'data': {'token': token}})
if __name__ == '__main__':
app.run(debug=True)
```
注释已经加上了,代码中使用了Flask框架搭建了一个简单的API服务,并使用了pymysql库连接MySQL数据库。其中,`login()`方法实现了登录接口的逻辑,包括解析请求参数、查询数据库、验证密码、生成token和返回响应。在生成token时,使用了`jwt`库进行编码,将用户id和token过期时间保存在payload中,然后使用HS256算法编码生成token。在实际生产环境中,需要根据实际需求修改算法和加密密钥等参数。