【发布时间】:2021-04-06 01:06:25
【问题描述】:
我是 Flask 的新手,我使用 Flask 构建了一个基本的 Web 应用程序。此应用程序将由单个用户使用。用户必须连接才能访问任何路由。在我的应用上创建新路由并确保用户在能够访问该页面之前已登录的最简单、最安全的方法是什么?
我添加了这条路线,即使我已经登录也可以访问该页面。
@login_required
@app.route('/secret')
def secret():
return "hello world"
app.py
from flask import Flask, render_template, url_for, request, session, redirect
from flask_pymongo import PyMongo
import bcrypt
app = Flask(__name__)
app.config['MONGO_DBNAME'] = xxx'
app.config['MONGO_URI'] = 'xxxx'
mongo = PyMongo(app)
@app.route('/')
def index():
if 'username' in session:
return 'You are logged in as ' + session['username']
return render_template('index.html')
@app.route('/login', methods=['POST'])
def login():
users = mongo.db.users
login_user = users.find_one({'name' : request.form['username']})
if login_user:
if bcrypt.hashpw(request.form['pass'].encode('utf-8'), login_user['password']) == login_user['password']:
session['username'] = request.form['username']
return redirect(url_for('index'))
return 'Invalid username/password combination'
@app.route('/register', methods=['POST', 'GET'])
def register():
if request.method == 'POST':
users = mongo.db.users
existing_user = users.find_one({'name' : request.form['username']})
if existing_user is None:
hashpass = bcrypt.hashpw(request.form['pass'].encode('utf-8'), bcrypt.gensalt())
users.insert({'name' : request.form['username'], 'password' : hashpass})
session['username'] = request.form['username']
return redirect(url_for('index'))
return 'That username already exists!'
return render_template('register.html')
@app.route('/logout')
def logout():
session.pop('username', None)
return render_template('index.html')
if __name__ == '__main__':
app.secret_key = 'mysecret'
app.run(debug=True, port='3500')
【问题讨论】:
-
我会使用
flask-login。如果有帮助,我有一个使用flask、flask-login和flask-pymongogithub.com/chriswilson1982/flask-mongo-app 的基本模板应用程序 -
感谢这个模板,我正在使用它!
-
我添加了一个摘要作为答案。我希望你觉得这个模板很有用。
标签: python mongodb authentication flask pymongo