Как узнать, вошел ли пользователь в Pyrebase и Flask или нет? - PullRequest
1 голос
/ 20 марта 2019
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 только когда пользователь вошел в систему?

1 Ответ

0 голосов
/ 20 марта 2019

используйте сеанс фляги для хранения вашего ключа, если ключ существует, то пользователь регистрируется,

также вы можете получить глобальный доступ ко всем переменным сеанса для отдельного сеанса

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 не вошел в систему. Но учтите, что в процессе выхода из системы вам необходимо удалить сеанс для этого пользователя.

...