python - 如何知道用户是否在 Pyrebase 和 Flask 中登录?
问题描述
app = Flask(__name__)
firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
db = firebase.database()
@app.route('/login', methods=["POST", "GET"])
def login():
message = ""
if request.method == "POST":
email = request.form["login_email"]
password = request.form["login_password"]
try:
user = auth.sign_in_with_email_and_password(email, password)
user = auth.refresh(user['refreshToken'])
user_id = user['idToken']
return redirect(url_for('admin'))
except:
message = "Incorrect Password!"
return render_template("login.html", message=message)
@app.route('/admin')
def admin():
return render_template("admin.html")
if __name__ == '__main__':
app.run()
如何仅/admin
在用户登录时加载页面?我知道它与用户令牌有关,但我仍然不确定如何使用令牌来识别用户是否登录。此外,user
anduser_id
没有定义在admin()
并且仅在中定义,login()
因为它们在函数中。
那么我需要在我的代码中进行哪些更改才能仅/admin
在用户登录时加载页面?
解决方案
使用烧瓶会话来存储您的密钥,如果密钥存在则用户被记录,
您还可以为单个会话全局访问所有会话变量
from flask import Flask, session, request
import requests
import os
app = Flask(__name__)
app.secret_key = os.urandom(24)
firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
db = firebase.database()
@app.route('/login', methods=["POST", "GET"])
def login():
message = ""
try:
print(session['usr'])
return redirect(url_for('admin'))
except KeyError:
if request.method == "POST":
email = request.form["login_email"]
password = request.form["login_password"]
try:
user = auth.sign_in_with_email_and_password(email, password)
user = auth.refresh(user['refreshToken'])
user_id = user['idToken']
session['usr'] = user_id
return redirect(url_for('admin'))
except:
message = "Incorrect Password!"
return render_template("login.html", message=message)
@app.route('/admin')
def admin():
try:
print(session['usr'])
return render_template("admin.html")
except KeyError:
return redirect(url_for('login'))
if __name__ == '__main__':
app.run()
如果session['usr']
未分配,则会给出关键错误,这意味着 usr 未登录。但请注意,在注销过程中,您需要删除该 usr 的会话。
推荐阅读
- vb.net - VB:从控制台更改为表单使左侧功能停止工作
- apache-tomee - TomEE中的数据源密码加密和解密
- python - 如何在运行时从python中的输入字符串定义函数?
- html - 允许元素溢出溢出:隐藏容器
- css - 试图结合两个 CSS 属性
- php - htaccess URL 将 301 重定向为小写,但有异常
- set - 在 Dafny 中,我可以定义一个映射集合的方法吗?
- c# - 如何将 ajax 数据发布到 aspx.cs 页面加载事件 asp.net?
- c++ - FastLED.h 阻止 ezButton.h
- jmeter - 修改或控制外部 JMeter 测试计划(JMX 文件)的 RPS