繁体   English   中英

烧瓶错误 500 内部服务器错误。 使用电子邮件/密码进行 Firebase 身份验证

[英]Flask error 500 Internal Server Error. Firebase-authentication with email/password

我正在尝试在我的 Flask 应用程序上使用电子邮件和密码实现 firebase 身份验证。 当我尝试登录或注册时出现此错误。 任何帮助,将不胜感激。

我对编码很陌生,所以如果可能的话请使用 ELI5。 任何有关如何改进我的代码的其他内容的指示将不胜感激。


127.0.0.1 - - [18/Jul/2021 21:02:09] "GET /login HTTP/1.1" 500 -
Traceback (most recent call last):
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask_socketio/__init__.py", line 46, in __call__
start_response)
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/engineio/middleware.py", line 74, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/realp/Desktop/firebaseflask-main/factory/users/views.py", line 63, in login
if session['user']:
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/werkzeug/local.py", line 377, in <lambda>
__getitem__ = lambda x, i: x._get_current_object()[i]
File "/Users/realp/Desktop/firebaseflask-main/env/lib/python3.7/site-packages/flask/sessions.py", line 84, in __getitem__
return super(SecureCookieSession, self).__getitem__(key)
KeyError: 'user'

from flask import render_template, Blueprint, redirect, request, abort, session, jsonify, make_response
from factory import db, auth, database
import random
from factory.models import Users, Cards, Subscription
from flask_login import login_user, current_user, logout_user, login_required
from werkzeug.security import generate_password_hash, check_password_hash
from datetime import date, datetime
from cardvalidator import luhn
import stripe
import json
users = Blueprint('users', __name__)
u/users.route('/register')
def register():
if session['users']:
return redirect('/dashboard')
else:
rand = random.randint(0,100000000)
return render_template('register.html', random=rand)

u/users.route('/insert-user', methods=['POST'])
def reg_user():
if request.method == 'POST':
first_name = str(request.form['first_name'])
last_name = str(request.form['last_name'])
phone_number = str(request.form['phone_number'])
email = str(request.form['email'])
password = str(request.form['password'])
user = auth.create_user_with_email_and_password(email, password)

data = {
"first_name": first_name,
"last_name": last_name,
"phone_number": phone_number,
"free_trial": 1,
"email": email
}
push_user = database.child("users").push(data, user['idToken'])
user_data = auth.get_account_info(user['idToken'])
data_user = {
"email": user_data['users'][0]['email'],
"data": data
}

session['user'] = data_user
return 'success'

u/users.route('/login')
def login():
if session['user']:
return redirect('/dashboard')
else:
rand = random.randint(0,100000000)
return render_template('login.html', random=rand)
u/users.route('/login-user', methods=['POST'])
def login_user_function():
data_user = {}
if request.method == 'POST':
email = str(request.form['email'])
password = str(request.form['password'])
login = auth.sign_in_with_email_and_password(email, password)
# user = auth.refresh(login['refreshToken'])
user_data = database.child("users").get(login['idToken'])
for user in user_data.each():
if user.val()['email'] == email:
data_user = {
"email": email,
"data": user.val()
}
session['user'] = data_user
return 'success'

u/users.route('/logout')
def logout():
session['user'] = {}
return redirect('/login')

# Add new card
u/users.route('/add_card', methods=['POST'])
def new_card():

if request.method == 'POST':
user_id = int(request.form['user_id'])
card_number = str(request.form['card_number'])
expiry = str(request.form['expiry'])
cvc = int(request.form['cvc'])
card_type = str(request.form['card_type'])
card_zip = str(request.form['card_zip'])
check_card = Cards.query.filter_by(card_number=card_number).first()
if check_card is None:
# Insert card
insert_card = Cards(card_number=card_number, expiry=expiry, cvc=cvc, user_id=user_id, card_type=card_type, card_zip=card_zip)
db.session.add(insert_card)
db.session.commit()
return 'success'

else:
return 'existed'
u/users.route('/validate-card', methods=['POST'])
def card_valid():
if request.method == 'POST':
card_number = int(request.form['card_number'])
if luhn.is_valid(card_number):
return 'valid'
else:
return 'fake'

u/users.route('/new-subscription', methods=['POST'])
u/login_required
def new_subscription():

if request.method == 'POST':
card_id = int(request.form['card_id'])
selection = int(request.form['selection'])
email = current_user.email

# # Stripe key
api_key_test = 'sk_test_xxxxx'
public_key_test = 'pk_test_xxxxx'
stripe.api_key = api_key_test
token = stripe.Token.create(
card={
"number": get_card_data.card_number,
"exp_month": int(month),
"exp_year": int(year),
"cvc": get_card_data.cvc,
'address_zip': get_card_data.card_zip
},
)
# return token
customer = stripe.Customer.create(email=email, source=token)
customer_id = customer.id
# # PAYMENT INFORMATION
charge = stripe.Charge.create(
customer = customer_id,
amount = amount,
currency = 'usd',
description = 'Subscription'
)
# Add Subscription
new_subscription = Subscription(
card_id=card_id,
period=selection,
price=(amount/100),
last_payment=datetime.today().strftime('%Y-%m-%d-%H:%M:%S'),
user_id=current_user.id)
db.session.add(new_subscription)
db.session.commit()
return 'success'

如果用户未登录,则会话中没有名为user密钥,因为您将在用户登录时定义它引发错误。 您应该检查会话中是否有任何关键user

而是在登录功能中使用。

if session['user']

你应该使用

if 'user' in session

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM