GitHub user rsaleev added a comment to the discussion: Custom SecurityManager 
issues with /embedded view

@dosu

how to fix CSRF token needed for /superset/log/ when requested after /embedded? 
May be manually set CSRF token?

Because after that request it tries to authenticate user and redirects to 
/login/ page

```
06/Mar/2026:09:25:59 +0000] "GET /health HTTP/1.1" 200 2 "-" "kube-probe/1.32"
2026-03-06 09:25:59,653:INFO:flask_wtf.csrf:The CSRF token is missing.
2026-03-06 09:25:59,653:WARNING:superset.views.error_handling:Refresh CSRF 
token error
Traceback (most recent call last):
  File "/app/.venv/lib/python3.12/site-packages/flask_wtf/csrf.py", line 261, 
in protect
    validate_csrf(self._get_csrf_token())
  File "/app/.venv/lib/python3.12/site-packages/flask_wtf/csrf.py", line 100, 
in validate_csrf
    raise ValidationError("The CSRF token is missing.")
wtforms.validators.ValidationError: The CSRF token is missing.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/app/.venv/lib/python3.12/site-packages/flask/app.py", line 1482, in 
full_dispatch_request
    rv = self.preprocess_request()
         ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/flask/app.py", line 1974, in 
preprocess_request
    rv = self.ensure_sync(before_func)()
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/flask_wtf/csrf.py", line 229, 
in csrf_protect
    self.protect()
  File "/app/.venv/lib/python3.12/site-packages/flask_wtf/csrf.py", line 264, 
in protect
    self._error_response(e.args[0])
  File "/app/.venv/lib/python3.12/site-packages/flask_wtf/csrf.py", line 307, 
in _error_response
    raise CSRFError(reason)
flask_wtf.csrf.CSRFError: 400 Bad Request: The CSRF token is missing.
2026-03-06 09:25:59,655:DEBUG:superset.async_events.async_query_manager:Token 
reset False
95.31.11.203 - - [06/Mar/2026:09:25:59 +0000] "POST 
/superset/log/?explode=events HTTP/1.1" 302
```

referrer 
`"https://my-domain/embedded/b1dc9391-2e05-4e86-bb79-9d4dfe2c3ea0?uiConfig=0&expand_filters=false&standalone=2";
 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 
Gecko) Chrome/145.0.0.0 Safari/537.36 Edg/145.0.0.0"`

I  use custom init_app now, but error still exists

```
 def _user_is_guest(sm):
        if request.headers.get("X-GuestToken"):
            return True
        if hasattr(g, "user"):
            user = g.user
            if hasattr(user, "is_guest") and sm.is_guest_user(g.user):
                return True
            if hasattr(user, "username") and "guest" in user.username:
                return True
        return False
    
    def _handle_guest_request(sm):
        guest_user = sm.get_guest_user_from_request(request)
        guest_user_id = str(uuid4())
        guest_role_name = current_app.config.get("GUEST_ROLE_NAME", "Public")
        guest_role = sm.find_role(guest_role_name) or sm.find_role("Public")
        guest_user.roles = [guest_role]
        guest_user.username = f"guest_{guest_user_id}"
        log.debug(
            f"✅ [auth_user_logged_in] Guest user: {guest_user.username} Guest 
user role: {guest_role}"
        )
        login_user(guest_user, force=True)
        g.user = guest_user
        session["async_user_id"] = guest_user_id
        # Make sure it's in the session
        return
    
    
    def _user_is_logged_in(sm):
        if hasattr(g, "user") and g.user and g.user.is_authenticated:
            return True
        try:
            if current_user.is_authenticated:
                g.user = current_user
                log.debug(
                    f"✅ [auth_user_logged_in] Set g.user from current_user: 
{g.user.username}"
                )
                return True
        except Exception as e:
            log.debug(f"[auth_user_logged_in] current_user check failed: {e}")
        user_id = session.get("_user_id")
        if user_id:
            try:
                user =(
                    sm.session.query(sm.user_model)
                    .filter(sm.user_model.user_id == user_id)
                    .one_or_none()
                )
                if user:
                    g.user = user
                    log.debug(
                        f"✅ [auth_user_logged_in] Loaded user from session ID: 
{user.username}"
                    )
                    login_user(user, force=False, 
duration=PERMANENT_SESSION_LIFETIME)
                    return True
                else:
                    log.warning(f"User ID {user_id} in session but not found in 
DB")
                    session.pop("_user_id", None)  # Clean up bad session
            except Exception as e:
                log.error(f"[auth_user_logged_in] Error loading user {user_id}: 
{e}")
                raise
        return False
```        

GitHub link: 
https://github.com/apache/superset/discussions/38467#discussioncomment-16021130

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: 
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to