0

在我的应用程序中,我在用户模型中添加了一个字段twilio_video_token作为字符串。
当需要创建与特定用户关联的令牌时,我会这样做:

token = Twilio::JWT::AccessToken.new ENV["TWILIO_ACCOUNT_SID"], ENV["TWILIO_API_KEY"], ENV["TWILIO_API_SECRET"], ttl: 3600, identity: @user.name
@user.twilio_video_token = token.to_jwt
@user.save

然后,稍后在我的应用程序中,我有一个特定用户的实例。
所以我像这样访问他的令牌:@user.twilio_video_token,但它是一个字符串,所以我无法读取存储在令牌中的信息(如identitygrants)。
如何将此字符串转换为Twilio::JWT::AccessToken对象?


我尝试了什么:
使用'jwt' gem

@token = JWT.decode current_user.twilio_video_token, ENV["TWILIO_API_SECRET"], true, { algorithm: 'HS256' }

但这是一团糟......
当我打印@token时,我看到identitygrants

[{"jti"=>"SK****", "grants"=>{"identity"=>"Sylvain"}, "iss"=>"SK****", "nbf"=>1587406278, "exp"=>1587409878, "sub"=>"AC***"}, {"cty"=>"twilio-fpa;v=1", "typ"=>"JWT", "alg"=>"HS256"}]

我不得不承认,我将 Twilio doc 视为一个巨大的迷宫!我喜欢它,但我不知道我在哪里!

非常感谢您的帮助
西尔万

4

1 回答 1

0

您缺少它的授权数组参数,Twilio::JWT::AccessToken.new 它应该如下所示:

token = Twilio::JWT::AccessToken.new(
  ENV["TWILIO_ACCOUNT_SID"], 
  ENV["TWILIO_API_KEY"], 
  ENV["TWILIO_API_SECRET"],
  [grant],  
  ttl: 3600, 
  identity: @user.name
)

哪里grant可以Twilio::JWT::AccessToken::VoiceGrant.new作为例子。

请参阅Twilio API:访问令牌

我从未使用过 Twilio API,但对我来说,您不应该将令牌保存到用户记录中,因为这些令牌具有 TTL,这意味着您必须在每次更改令牌时更新用户记录。

我希望这有帮助。

最佳弗洛

于 2020-04-21T10:34:50.833 回答