1

Sinch を ROR Web アプリケーションに統合しようとしていますが、signedUserToken をフォーマットして sinchClient を開始するのに苦労しています。Haml を使用した私の見解は次のとおりです。

#{@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]

少しでも助けていただければ幸いです。また、適切な情報を入手して時間を割くことができれば、Rails に Sinch を統合するための Rubygem を作成することもできます。

乾杯、ジェームズ

編集 :

私はいくつかの変更を試みましたが、近づいています(と思います)。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

しかし今、私は次のエラーに直面しています:

POST https://api.sinch.com/v1/instance 500 (内部サーバー エラー) client:1 XMLHttpRequest はhttps://api.sinch.com/v1/instanceを読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン 'http:// localhost:3000' へのアクセスは許可されません。応答の HTTP ステータス コードは 500 でした。

(localhost の前のスペースは、SO の新しいユーザー制限によるものです)

Rack::Cors を Rails サーバーに追加して、クロスドメイン リクエストが自分のリクエストから来た場合に備えて許可しようとしましたが、どのような構成を試しても、リクエストに正しいヘッダーが含まれていないようです。CORS リクエストを誤解していますか? 問題は sinch.min.js によって生成されたリクエストから来ていますか?

よろしく、ジェームズ

4

2 に答える 2

2

エラー メッセージは、base64 文字セットにない記号 (@ など) が原因で、Firefox base64 デコーダーがトークンをデコードできないことが原因です。これは、チケットが実際には start() に渡されていないことを示しており、この行は正しくない可能性があります。

'userTicket' : "#{@signedUserTicket}",
于 2015-02-09T12:11:43.930 に答える
1

私は HAML を知りませんが、'userTicket' : "#{@signedUserTicket}" を 'userTicket' : @signedUserTicket にするべきではありません。

于 2015-02-09T10:33:12.547 に答える