2011-01-21 12 views
2

Facebook signed_requestによると、安全なクッキーを作成して、わかっている私のFacebookアプリの秘密で署名したいと考えています。Sinatraでサインキャンバス認証:署名付きクッキー(ラック付き)

私は既にRuby method that decodes the signed_request sent by Facebookを実装しました。

これはうまくいきましたが、現在はrunwithfriendsとして、同じ署名手続きを使用するクッキーをクライアントに送り返したいと思います。

私はrack source codeを見ていて、この機能を提供しているようです。

しかし、Sinatraでこれを行う方法は不思議です。 set_cookieは、set_cookie_headersのラッパーで、秘密を受け入れていないようです。だから、私はRackと一緒にやる必要があると思う。私はそれを試み、報告します。

一方、Sinatra BookはセッションベースのCookieを提供しています。

ので、クッキーを設定する間、その後違い何:

set_cookie("u", 123) 

またはセッション変数を設定する:

session["u"] = 123 

私は自分自身がシナトラ&ラックのソースコードを掘りました。考えがある。私は彼らが特定のデフォルト機能の他にほとんど同じだと思う。

答えて

2

1つのオプション。

このようなFacebookブックアプリケーションには、サーバー側の「セッション」ソリューションを使用することをおすすめします。たとえば、https://github.com/jodosha/redis-storeは、シリアル化されたオブジェクトを格納できるSinatraの "キャッシュ"オブジェクトを提供します。また、メモリがあまり蓄積しないように、Redisキーの有効期限を設定できます。私はFacebookのユーザーIDをキャッシュのキーとして使用することをお勧めします。そのため、ユーザーが使用しているコンピュータ/ブラウザに関係なく、セッションは常に同じになります。また、SafariやChromeで動作しないiframeでCookieを設定することについても心配する必要はありません。フィルタの前に

@session = cache.fetch("session-#{@uid}") { {} }

フィルタ後:cache.set("session-#{@uid}", @session)