как я могу передать curent_user из flask-security в подключаемую функцию просмотра?

У меня есть фляжное приложение, которое использует фляжную безопасность для аутентификации. Я хочу использовать graphql с graphene для получения данных, но У меня проблемы с доступом к current_user прокси, который я всегда использовал для разрешения запросов. graphene предоставляет только настраиваемое подключаемое представление, которое понятно, но не может получить доступ к current_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')

person Kasra Magmont    schedule 07.01.2018    source источник
comment
Используете ли вы JWT для аутентификации?   -  person Shivansh Jagga    schedule 06.07.2020


Ответы (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))
person Yuriy Mahnovskyy    schedule 24.01.2018