C+格式的不记名代币+;生成器/FMX REST功能?

C+格式的不记名代币+;生成器/FMX REST功能?,rest,jwt,firemonkey,c++builder,Rest,Jwt,Firemonkey,C++builder,我有一个服务器应用程序运行在node.js/Mongoose/MongoDB中,带有REST接口 我的客户端应用程序是在Embarcadero C++Builder/Firemonkey(FMX)中构建的,到目前为止,使用Embarcadero REST功能(TRESTClient/TRESTRequest/TRESTResponse)与节点服务器进行交互都很好 我最近使用JSON Web令牌向我的服务器添加了身份验证,并且用户注册/登录成功,使用以下代码返回了一个承载令牌: const tok

我有一个服务器应用程序运行在node.js/Mongoose/MongoDB中,带有REST接口

我的客户端应用程序是在Embarcadero C++Builder/Firemonkey(FMX)中构建的,到目前为止,使用Embarcadero REST功能(TRESTClient/TRESTRequest/TRESTResponse)与节点服务器进行交互都很好

我最近使用JSON Web令牌向我的服务器添加了身份验证,并且用户注册/登录成功,使用以下代码返回了一个承载令牌:

const token = jwt.sign({sub: user.id}, process.env.JWT_SECRET, {expiresIn: '30d' })
通过使用承载令牌发送REST请求,通过express jwt实现对数据的访问。Postman使使用承载令牌()发送数据请求变得很容易,但是我无法找到如何使用Embarcadero的REST功能来完成这个看似简单的任务

我已经尝试使用Embarcadero REST OAUTH/OAUTH2/SIMPLE/BASIC身份验证方法,在访问令牌和请求令牌字段中使用承载令牌,但似乎没有任何效果


如何做到这一点?我确信这是我所缺少的一些简单的东西,但我几乎找不到任何文档。

我为在C++Builder中与REST一起使用身份验证时遇到问题的其他人找到了一个答案:

  • 设计时间方法: -->设置TresClient、TresRequest、TresResponse -->在TRESTRequest参数中,使用以下字段创建新参数:
  • 在运行时为授权创建REST客户端:
Name: Authorization, Value: Bearer XXXXXXXX (JWT String), Options: poDoNotEncode (this is the important part
// initialize REST client
    TRESTClient* pRESTClient = new TRESTClient(BASE_URL);
    pRESTClient->ContentType = "application/json";
// connect REST request for querying server
    TRESTRequest* pRESTRequest = new TRESTRequest(NULL);
    pRESTRequest->Client = pRESTClient;
// connect REST response for receiving JSON from server
    TRESTResponse* pRESTResponse = new TRESTResponse(NULL);
    pRESTRequest->Response = pRESTResponse;
    pRESTResponse->ContentType = "text/html";

// do authenticated query
    pRESTRequest->Method = rmGET;
    pRESTRequest->Resource = ROUTE_ITEMS;
    pRESTRequest->ResourceSuffix = SUBROUTE_ITEMSUFFIX;

    pRESTRequest->Params->Clear();
    TRESTRequestParameter* param = pRESTRequest->Params->AddItem();
    param->Name = "Authorization";
    param->ContentType = ctNone;
    param->Kind = pkHTTPHEADER;
    param->Options << poDoNotEncode;
    char temp[512];
    sprintf(temp, "Bearer %s", JWT_TOKEN);
    param->Value = (const char*)temp;

    pRESTRequest->Execute();
app.use(jwt({
  secret: process.env.JWT_SECRET,
  credentialsRequired: false,
  getToken: function fromHeaderOrQuerystring (req) {
    if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
        return req.headers.authorization.split(' ')[1];
    } else if (req.query && req.query.token) {
      return req.query.token;
    }
    return null;
  }
}));