如何将curent_user 从flask-security 传递给可插入的视图函数?

Posted

技术标签:

【中文标题】如何将curent_user 从flask-security 传递给可插入的视图函数?【英文标题】:how can I pass curent_user from flask-security to a pluggable view function? 【发布时间】:2018-06-16 10:56:54 【问题描述】:

我有一个烧瓶应用程序,它使用烧瓶安全性进行身份验证。我想使用带有graphene 的graphql 来获取数据,但是我无法访问current_user 代理,这是我一直用来解析请求的。 graphene 仅提供了一个自定义的pluggable view,这是可以理解的,但它无法在应用程序的上下文中访问 c​​urrent_user,因此 current_user 恢复为 AnonymousUser。

这里是一些示例代码

from flask import Flask, render_template, redirect, request
from flask_security import Security, SQLAlchemySessionUserDatastore, login_required, current_user, login_user

from flask_graphql import GraphQLView
import graphene
from graphene_sqlalchemy import SQLAlchemyConnectionField

from .models import UserModel, RoleModel, Todo, TodoModel
from .pipeline import session

app = Flask(__name__, template_folder="../templates", static_folder="../static")
app.config.from_object('core.pipeline.configs.DevConfig')
user_datastore = SQLAlchemySessionUserDatastore(session, UserModel, RoleModel)
security = Security(app, user_datastore)

@app.route('/')
@login_required
def index(path):
    user = current_user

    return render_template('index.html')

【问题讨论】:

你在使用 JWT 进行身份验证吗? 【参考方案1】:

您的代码中的主要问题是

app.add_url_rule('/graphql', view_func=graphql_view())

graphql_view() 在代码加载期间在没有任何烧瓶请求上下文的情况下运行。

请试试这个代码

class GraphQLViewCurrentUser(GraphQLView):

    def get_context(self, request):
        context = super().get_context(request)
        context.update('current_user': current_user)
        return context


app.add_url_rule(
    '/graphql', view_func=GraphQLViewCurrentUser.as_view(
        'graphql', schema=schema, context=, graphiql=True))

【讨论】:

以上是关于如何将curent_user 从flask-security 传递给可插入的视图函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 Ms 访问迁移到 Derby 数据库或如何将数据从 My sql 迁移到 Derby 数据库

如何将数据从mongodb导入hive

将触摸事件从覆盖 UIView 转发到 UIWebView / 如何从代码将触摸事件发送到 uiwebview

如何将数据从活动发送到 java 类

如何将对象从 ContainerRequestFilter 传递到资源

如何将消息从 DLL 传递到应用程序