Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask login@login\u必需不工作_Python_Flask_Flask Login - Fatal编程技术网

Python Flask login@login\u必需不工作

Python Flask login@login\u必需不工作,python,flask,flask-login,Python,Flask,Flask Login,我使用flask登录来确保用户在访问某些页面之前已登录。我在想要保护的视图上使用了@login\u required,但即使我在想要设置用户的位置设置了login\u user(user),它也不允许我进入受保护的路由(索引)。我正在打印我的user\u登录名(user)的值,它返回True。我做错了什么 @app.route('/') @app.route('/index') @login_required def index(): print("was in here", file=

我使用flask登录来确保用户在访问某些页面之前已登录。我在想要保护的视图上使用了
@login\u required
,但即使我在想要设置用户的位置设置了
login\u user(user)
,它也不允许我进入受保护的路由(索引)。我正在打印我的
user\u登录名(user)
的值,它返回
True
。我做错了什么

@app.route('/')
@app.route('/index')
@login_required
def index():
    print("was in here", file=sys.stderr)
    return render_template('index.html')
这是我设置
user\u登录(user)

这是我的用户加载程序

@login_manager.user_loader
def load_user(userid):
    try:
        return models.User.get(models.User.id == userid)
    except models.DoesNotExist:
        return None
这是我的用户模型

sqlite_db = SqliteDatabase('sqlite.db')

class BaseModel(Model):
    class Meta:
        database = sqlite_db

class User(UserMixin, BaseModel):
    username = CharField(unique=True)
    quizlet_id = CharField(unique=True)
    joined_at = DateTimeField(default=datetime.datetime.now)

    @classmethod
    def create_user(cls, username, quiz_id, **kwards):

        try:
            cls.select().where(
                (cls.username == username) | (cls.quizlet_id == quiz_id)
            ).get()
        except cls.DoesNotExist:
                print("putting user in thing", file=sys.stderr)
                user = cls(username = username, quizlet_id = quiz_id)

                print(user.username)
                user.save()
                return user
        else:
            raise Exception("User with that email exists already")

    @staticmethod
    def set_password(password):

        return generate_password_hash(password.encode('utf-8'))

用户名字段是主键吗?假设您使用的是sql alchemy,get()方法总是查找主键,不接受表达式,请参阅


请使用
user=models.user.filter_by(username=response['username'])重试。
..

如果您使用的是flask登录,则需要确保库可以使用您的函数根据ID加载用户。 这种类型的东西:

@login_manager.user_loader
def load_user(user_id):
    return models.User.get(models.User.id == user_id)

请阅读文档了解如何操作。

刚刚花了2个小时试图解决此问题,并意识到这是因为关闭了所需的登录配置而无法工作

在我当地的发展环境中,我设置了

app.config['TESTING']=True

如果应用程序配置变量登录被禁用测试被禁用 设置为True时,将忽略所需的登录\u装饰程序

把它设回这个位置,让它工作起来

@app.before_first_request
def init_app():
    logout_user()

app.config['TESTING']=False

我的问题是
@flask\u login.login\u required
decorator位于
@app.route(“”)
decorator之上,所以我刚刚替换了它们,它就工作了

由此:

@flask_login.login_required
@app.route('/')
def index():
    return render_template("index.html")
为此:

@app.route('/')
@flask_login.login_required
def index():
    return render_template("index.html")

只需检查用户是否已登录。用户可能登录了一个cookie。 我通过将用户设置为已登录并添加了 饼干。
我刚刚加了这个,让它工作了

@app.before_first_request
def init_app():
    logout_user()

它工作得非常好

您的
用户\u加载程序
回调定义在哪里?@MattHealy与我的路由在同一个文件中。我已经在上面添加了它如果你在调试模式下运行应用程序,你会遇到什么错误?我没有收到错误我使用的是sqlite3,我已经添加了我的用户模型(无法编辑我的上一条评论),我使用pewee ORM实现了你的代码,我面临的问题是因为try exep else在
login\u user()上禁止了一个异常
,这表明ORM上登录所需的方法存在问题。用户混合在哪里?你可以看到我的代码,希望它能帮助你…我有了加载程序。我不认为这是问题所在。这里的语法是错误的
models.User.id==User\u id
是一个布尔值,因此您正在调用
models.User.get(True)
,这没有帮助。这需要更改为
models.User.get(User\u id
这使我免于数小时的挠头。谢谢。猜猜是谁挠头了一整天