如何解决未经授权的错误烧瓶?

时间:2021-07-02 14:52:48

标签: python flask

我在我的 RPi 上运行了一个 Flask 应用程序来控制 LED,我实现了一个用户登录界面。一切正常,但现在每次我尝试连接到我得到的帐户 “未经授权 服务器无法验证您是否有权访问所请求的 URL。您要么提供了错误的凭据(例如错误的密码),要么您的浏览器不了解如何提供所需的凭据。” 现在,当用户不存在或输入错误的凭据时,我也会收到错误消息“TypeError:'login' 的视图函数未返回有效响应。该函数要么返回 None,要么在没有返回语句的情况下结束。”< /p>

老实说,这个错误让我发疯,因为我什至没有接触过代码,而且我真的不知道问题出在哪里。

提前感谢您的时间和耐心。

import RPi.GPIO as GPIO
from flask import Flask, render_template,redirect, \
    url_for, request, session, flash, g, abort
from flask_sqlalchemy import sqlalchemy, SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
from functools import wraps

database = "credientals.db"


app = Flask( __name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///{db}'.format(db=database)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = "You can't touch what you can't see"

db = SQLAlchemy(app)

class User(db.Model):
    user_id = db.Column(db.Integer, primary_key = True)
    username = db.Column(db.String(100), unique = True, nullable = False)
    password_hashed = db.Column(db.String(100), nullable = False)

    def __repr__(self):
        return '' % self.username

def create_db():
    db.create_all()

def login_required(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        if 'logged_in' in session:
            return f(*args, **kwargs)
        else:
            flash('You need to login first.')
            return redirect(url_for('login'))
    return wrap

@app.route("/signup/", methods = ["GET", "POST"])
def signup():
    if request.method == "POST":
        username = request.form['username']
        password = request.form['password']

        if not (username and password):
            flash('cannot signup: credentials empty!')
            return redirect(url_for('signup'))
        else:
            username = username.strip()
            password = password.strip()

        hashed_password = generate_password_hash(password, method='pbkdf2:sha256', salt_length=16)
        new = User(username = username, password_hashed = hashed_password)
        db.session.add(new)

        try:
            db.session.commit()
        except sqlalchemy.exc.IntegrityError:
            flash("User {u} already taken!".format(u=username))
            return redirect(url_for("signup"))
        flash("Account has been created!")
        return redirect(url_for("login"))
    return render_template("signup.html")

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

        if not (username and password):
            flash("Username or Password cannot be empty.")
            return redirect(url_for('login'))
        else:
            username = username.strip()
            password = password.strip()

        user = User.query.filter_by(username=username).first()

        if user and check_password_hash(user.password_hashed, password):
            session['logged_in'] = True
            return redirect(url_for("user", username=username))
        else:
            flash("Invalid username or password.")
    else:
        return render_template("login.html")

0 个答案:

没有答案
相关问题