我在我的 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")