如何格式化sinch的signedUserToken?
我正在尝试将Sinch集成到我的ROR webapp中,但在格式化signedUserToken以启动Sinch客户端时遇到了一些困难。 以下是我使用haml的观点:如何格式化sinch的signedUserToken?,sinch,Sinch,我正在尝试将Sinch集成到我的ROR webapp中,但在格式化signedUserToken以启动Sinch客户端时遇到了一些困难。 以下是我使用haml的观点: #{@signedUserTicket} %script{src: "//cdn.sinch.com/latest/sinch.min.js", type: "text/javascript"} = javascript_tag do $(function(){ $sinchClient = new SinchCl
#{@signedUserTicket}
%script{src: "//cdn.sinch.com/latest/sinch.min.js", type: "text/javascript"}
= javascript_tag do
$(function(){
$sinchClient = new SinchClient({
applicationKey: 'APP_KEY',
capabilities: {messaging: true, calling: true},
supportActiveConnection: true,
onLogMessage: function(message) {
console.log(message);
},
});
$sinchClient.start({
'userTicket' : "#{@signedUserTicket}",
});
});
无论我在控制器中尝试进行何种格式设置,最接近成功的是:
DOMException [InvalidCharacterError: "String contains an invalid character"
code: 5
nsresult: 0x80530005
location: http://cdn.sinch.com/latest/sinch.min.js:5]
如果我能得到正确的信息并能抽出一些时间,我将非常感谢您的帮助,甚至会构建一个Rubygem来将Sinch集成到Rails中
干杯,
詹姆斯
编辑:
我已经尝试了一些修改,并且越来越接近了(我想)。
InvalidCharacter的问题来自尾随的“=”在Javascript中显然不能很好地解码
我的新控制器现在是:
class SinchController < ApplicationController
skip_before_filter :verify_authenticity_token
before_filter :authenticate_user!
def client
username = current_user.username
applicationKey = "APP_KEY"
applicationSecret = "APP_SECRET_B64"
userTicket = {
"identity" => {"type" => "username", "endpoint" => username},
"expiresIn" => 3600,
"applicationKey" => applicationKey,
"created" => Time.now.utc.iso8601
}
userTicketJson = userTicket.to_json
userTicketBase64 = Base64.strict_encode64(userTicketJson).chop
digest = Digest::HMAC.digest(Base64.decode64(applicationSecret), userTicketJson, Digest::SHA256)
signature = Base64.strict_encode64(digest).chop
@signedUserTicket = (userTicketBase64 + ':' + signature).remove('=')
end
end
类SinchController{“类型”=>“用户名”,“端点”=>username},
“expiresIn”=>3600,
“applicationKey”=>applicationKey,
“已创建”=>Time.now.utc.iso8601
}
userTicketJson=userTicket.to_json
userTicketBase64=Base64.strict_encode64(userTicketJson).chop
digest=digest::HMAC.digest(Base64.decode64(applicationSecret),userTicketJson,digest::SHA256)
签名=Base64。严格编码64(摘要)。印章
@signedUserTicket=(userTicketBase64+':'+签名)。删除('='))
结束
结束
但现在我面临以下错误:
POST 500(内部服务器错误)
客户端:1 XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“http://localhost:3000”。响应的HTTP状态代码为500
(localhost之前的空间是由于SO上的新用户限制造成的)
我在rails服务器中添加了Rack::Cors,以便在跨域请求来自我自己的请求的情况下尝试并允许跨域请求,但无论我尝试了什么配置,请求似乎从来没有包含正确的头。
我是否误解了CORS的要求?问题是否来自sinch.min.js生成的请求
问候,,
詹姆斯我不认识哈姆,但不应该认识他 “用户票证”:“{@signedUserTicket}”,
be'userTicket':@signedUserTicket,错误消息是由于Firefox base64解码器无法解码令牌,原因是base64字符集中没有符号(如@)。这表明该票据实际上没有传递到start(),该行可能不正确
'userTicket' : "#{@signedUserTicket}",
别忘了从帖子中删除你的应用程序密钥和密码!如果您使用以下解决方案之一,请将该答案标记为已接受!或者,如果您有不同的解决方案,请与我们分享。我尝试了围绕haml问题的各种组合,并坚持我的原始格式,这是唯一一种不会返回无效字符(字符有时是“:”或“&”)的格式。