повысить ValueError («Неверная соль») ValueError: Неверная соль --- python - PullRequest
0 голосов
/ 26 марта 2020

Здесь я попытался создать систему регистрации входа. Что касается процесса регистрации, я завершил процесс, но при попытке войти через пароль он не проходит проверку. Ошибка недопустимой соли возникает, как я могу решить эту проблему. ниже приведен код, который я написал, я много пытался проверить ошибку

   File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\sudeep\Desktop\example\login.py", line 72, in login
    if bcrypt.check_password_hash(response['password'], password):
TypeError: tuple indices must be integers or slices, not str
 * Detected change in 'C:\\Users\\sudeep\\Desktop\\example\\login.py', reloading
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 166-863-788
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [26/Mar/2020 11:32:40] "POST /users/login HTTP/1.1" 500 -
Traceback (most recent call last):
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 2463, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 2449, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1866, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\sudeep\Desktop\example\login.py", line 72, in login
    if bcrypt.check_password_hash(response[2], password):
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\flask_bcrypt.py", line 193, in check_password_hash
    return safe_str_cmp(bcrypt.hashpw(password, pw_hash), pw_hash)
  File "C:\Users\sudeep\Desktop\example\venv\Lib\site-packages\bcrypt\__init__.py", line 86, in hashpw
    raise ValueError("Invalid salt")
ValueError: Invalid salt

login.py

     from app import app, conn, bcrypt
from flask import request, jsonify
from flask_bcrypt import Bcrypt, check_password_hash
from datetime import datetime
import logging
from flask_jwt_extended import create_access_token

# registration api #################################################33


@app.route('/users/register', methods=['GET'])
def get_all_users():
    cur = conn.cursor()
    cur.execute("SELECT * FROM admin.admin")
    rv = cur.fetchall()
    return jsonify(rv)


@app.route('/users/register/<id>', methods=['GET'])
def get_by_id(id):
    cur = conn.cursor()
    cur.execute("SELECT * FROM admin.admin WHERE id= " + id)
    rv = cur.fetchone()
    return jsonify(rv)


@app.route('/users/register', methods=['POST'])
def register():

    try:
        cur = conn.cursor()
        first_name = request.get_json()['first_name']
        last_name = request.get_json()['last_name']
        email = request.get_json()['email']
        password = bcrypt.generate_password_hash(
            request.get_json()['password']).decode('utf-8')
        created = datetime.utcnow()

        cur.execute("INSERT INTO admin.admin(first_name,last_name,email,password,created) VALUES('" +
                    str(first_name) + "','" +
                    str(last_name) + "','" +
                    str(email) + "','" +
                    str(password) + "','" +
                    str(created) + "')")
        conn.commit()
        result = {
            "first_name": first_name,
            "last_name": last_name,
            "email": email,
            "password": password,
            "created": created
        }
        return jsonify({"result": result})
    except Exception as e:
        conn.rollback()
        logging.error("db error:{}".format(e))

##########################LOGIN API#######################################


@app.route('/users/login', methods=['POST'])
def login():

    cur = conn.cursor()
    email = request.get_json()['email']
    password = request.get_json()['password']
    result = ""
    cur.execute("SELECT * FROM admin.admin WHERE email='" +
                str(email) + "'")
    response = cur.fetchone()
    if response:
        if bcrypt.check_password_hash(response[2], password):

            access_token = create_access_token(identity={
                'first_name': response['first_name'],
                'last_name': response['last_name'],
                'email': response['email']
            })
            result = jsonify({"token": access_token})
        else:
            result = jsonify({"error": "invalid username and password"})
    else:
        result =jsonify({"result":"NO results found"})
    return result

run.py

   from app import app
if __name__ == '__main__':
    app.run(debug=True, port=5000)

app.py

   from flask import Flask, jsonify, request, json
import psycopg2
from datetime import datetime
from flask_cors import CORS
from flask_bcrypt import Bcrypt
from flask_jwt_extended import JWTManager
from flask_jwt_extended import create_access_token


app = Flask(__name__)
conn = psycopg2.connect(host="localhost", database="practise",
                        user="postgres", password="dbA@pr3mium")
bcrypt = Bcrypt(app)
jwt = JWTManager(app)
CORS(app)

import login

needs.txt

  astroid==2.3.3
autopep8==1.5
bcrypt==3.1.7
cffi==1.14.0
click==7.1.1
colorama==0.4.3
Flask==1.1.1
Flask-Bcrypt==0.7.1
Flask-Cors==3.0.8
Flask-JWT-Extended==3.24.1
Flask-SQLAlchemy==2.4.1
isort==4.3.21
itsdangerous==1.1.0
Jinja2==2.11.1
lazy-object-proxy==1.4.3
MarkupSafe==1.1.1
mccabe==0.6.1
psycopg2==2.8.4
pycodestyle==2.5.0
pycparser==2.20
PyJWT==1.7.1
pylint==2.4.4
six==1.14.0
SQLAlchemy==1.3.15
Werkzeug==1.0.0
wrapt==1.11.2
...