Pyrebase 和 Flask 如何知道用户是否登录?
How to know whether user is logged in or not in Pyrebase and 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
和 user_id
未在 admin()
中定义,仅在 login()
中定义,因为它们在函数中。
那么我需要在我的代码中更改什么才能仅在用户登录时加载 /admin
页面?
使用 flask session 来存储你的密钥,如果密钥存在则用户被登录,
您还可以全局访问单个会话的所有会话变量
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']
没有分配那么它会给出关键错误,这意味着用户未登录。但请注意,在注销过程中,您需要删除该用户的会话。
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
和 user_id
未在 admin()
中定义,仅在 login()
中定义,因为它们在函数中。
那么我需要在我的代码中更改什么才能仅在用户登录时加载 /admin
页面?
使用 flask session 来存储你的密钥,如果密钥存在则用户被登录,
您还可以全局访问单个会话的所有会话变量
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']
没有分配那么它会给出关键错误,这意味着用户未登录。但请注意,在注销过程中,您需要删除该用户的会话。