Posit Connect中Plumber API用API Key认证时RSTUDIO_USER_IDENTITY为空的问题与解决
问题解答
1. 为何Sys.getenv()["RSTUDIO_USER_IDENTITY"]为空?
RSTUDIO_USER_IDENTITY是仅针对Posit Connect交互式RStudio会话的环境变量——只有当用户在Posit Connect平台内打开交互式RStudio编辑器时,该变量才会被自动设置。而你部署的Plumber API是作为无状态的后台服务运行的,不属于交互式会话场景,因此这个环境变量不会被初始化,调用后自然返回空值。
2. 替代方法:获取API密钥对应的用户账户信息
有两种可靠的方式可以实现需求:
方法一:直接读取Plumber请求对象的user属性
当请求通过API密钥成功认证后,Posit Connect会自动将对应的用户信息注入到Plumber的req请求对象中,你可以直接读取req$user获取用户ID、用户名等核心信息:
library(plumber) #* @get /exampleapi information <- function(req, res, session) { # 返回用户ID和用户名 return(list( user_id = req$user$id, username = req$user$username )) }
方法二:调用Posit Connect内部API查询完整用户信息
如果需要更详细的用户数据(比如邮箱、角色等),可以用当前请求的API密钥调用Posit Connect的/v1/user端点,该端点会返回密钥对应的用户完整信息:
library(plumber) library(httr2) #* @get /exampleapi information <- function(req, res, session) { # 从请求头中提取API密钥 api_key <- sub("^Key ", "", req$HTTP_AUTHORIZATION) # 调用Connect用户信息接口 user_info <- request(Sys.getenv("CONNECT_SERVER")) %>% req_url_path_append("v1/user") %>% req_auth_bearer_token(api_key) %>% req_perform() %>% resp_body_json() return(user_info) }
注意:部署API时需在Posit Connect的环境变量设置中添加
CONNECT_SERVER,值为你的Connect服务器地址(例如https://your-connect-domain.com)。
内容的提问来源于stack exchange,提问作者user3516915
相关产品推荐
相关产品推荐

