сессия недоступна при регистрации пользователя в flask - PullRequest
2 голосов
/ 19 июня 2020

Я изучаю flask и пытался создать бэкэнд flask и создать остальные apis и использовать mongoengine для базы данных. python app.py работал успешно, но когда я передаю адрес электронной почты и пароль в почтальоне, я получаю The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret при регистрации пользователя. может кто-нибудь помочь мне указать, где я ошибся?

app.py

from flask import Flask,render_template,request,redirect,url_for,send_file,make_response,jsonify
import sys
from flask_cors import CORS
from configuration import config
import json
from flask_login import LoginManager, login_required, login_user, logout_user, current_user
from functools import wraps, update_wrapper
from datetime import datetime
import time 

app=Flask(__name__, static_folder="build/static", template_folder="build")

app.config['MONGO_DBNAME'] = "learning"
app.config["MONGO_URI"] = 'mongodb://localhost:27017/learning'
app.config['JWT_SECRET_KEY'] = 'secret'


CORS(app)

from crud import insert, read

#Initialising flask login manager
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "render_loginpage"

@login_manager.user_loader
def user_loader(id):
    user=read.user_loader(id)
    return user

@login_manager.unauthorized_handler
def unauthorized_handler():
    return redirect(url_for('render_loginpage'))

def nocache(view):
    @wraps(view)
    def no_cache(*args, **kwargs):
        response = make_response(view(*args, **kwargs))
        response.headers['Last-Modified'] = datetime.now()
        response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0'
        response.headers['Pragma'] = 'no-cache'
        response.headers['Expires'] = '-1'
        return response
    return update_wrapper(no_cache, view)


@app.route('/api/register',methods=['POST'])
def register_user():
    data=request.data
    return insert.register(json.loads(data))
if __name__=='__main__':
    app.run(host='0.0.0.0',port=5000,debug=True)

insert.py

from models.models import User,user_metadata
from datetime import datetime,timedelta
from werkzeug.security import generate_password_hash,check_password_hash
import uuid
import json
import requests
import re
import uuid
import string
import datetime
from validate_email import validate_email
import sys
sys.path.insert(0, '../')
from configuration import config
from flask import redirect,url_for
from flask_login import LoginManager, login_required, login_user, logout_user, current_user


def register(data):
    try:
        if len(data['username'])>4 and len(data['password'])>6 and validate_email(data['email'])==True:
        userid = str(uuid.uuid4())
User(userid=userid,name=data['username'],email=data['email'],password=generate_password_hash(data['password']),date_added=datetime.datetime.utcnow(),verifiedemail=True).save()
            exp = datetime.datetime.utcnow() + timedelta(days=2)
            user_metadata(userid=userid, active=True, expire_date=exp).save()
            user = User.objects(email=data['emailid']).first()
            login_user(user)
            return 'verified'

        else:
            if len(data['username'])<5:
                raise Exception('Given Name is too short')
            elif len(data['password'])<6:
                raise Exception('Given Password is too short')
            elif validate_email(data['email'])==None:
                raise Exception('Given Email Id format is invalid')
    except Exception as e:
        errormessage=str(e)
        errorname=errormessage.split(') (')
        if errorname[0]=='(pymysql.err.IntegrityError':
            return 'This Email Id already exists'
        else:
            return errormessage

models.py

import datetime
from flask_login import  UserMixin
from flask_mongoengine import MongoEngine
import sys
sys.path.append('../')

from configuration import config

db = MongoEngine()
class User(UserMixin, db.Document):
    userid = db.StringField(required=True,primary_key=True)
    name = db.StringField()
    email= db.StringField()
    date_added = db.DateTimeField()
    password= db.StringField()
    verifiedemail= db.BooleanField()

    def is_active(self):
        return True

    def get_id(self):
        return self.userid

    def is_authenticated(self):
        return True

    def is_anonymous(self):
        return False

class user_metadata(db.Document):
    userid=db.StringField(primary_key=True)
    active=db.BooleanField()
    expire_date=db.DateTimeField(default=datetime.datetime.utcnow())

if __name__ == "__main__":
    Base.metadata.create_all(bind=engine)


config.py

databasedetails={
    'hostname':'mongodb://localhost:27017/learning',
    'databasename':'learning',
    'port':'27017',

}

1 Ответ

2 голосов
/ 20 июня 2020

Вашему приложению нужен secret_key, который отличается от JWT_SECRET_KEY, например

app.secret_key = 'so-secret'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...