Аутентификация на холсте Facebook с помощью Sinatra: подписанный файл cookie (со стойкой) - PullRequest
2 голосов
/ 21 января 2011

Я хочу создать безопасный cookie-файл и подписать его секретом своего приложения Facebook, который знает только я, согласно Facebook signature_request .

Я уже реализовал метод Ruby, которыйдекодирует подписанный запрос, отправленный Facebook .

Это работает, но теперь, как и runwithfriends , я хочу отправить клиенту файл cookie, использующий ту же процедуру подписи.

Я просматривал исходный код стойки , и похоже, что он обеспечивает эту функциональность.

Однако мне интересно, как это сделать в Синатре.Похоже, set_cookie является оберткой вокруг set_cookie_headers, которая, похоже, не принимает секрета.Итак, я думаю, что я должен сделать это с Rack.Я попробую это и доложу.

В то же время, Книга Синатры говорит, что она предоставляет куки на основе сеанса.

Итак, в чем же разница междуустановив cookie:

set_cookie("u", 123)

или установив переменную сеанса:

session["u"] = 123

Я обнаружил, что копаюсь в исходном коде Sinatra & Rack.У меня есть идея.Я думаю, что они почти такие же, кроме определенных функций по умолчанию.

1 Ответ

2 голосов
/ 21 января 2011

Один вариант.

Я бы порекомендовал использовать серверное "сессионное" решение для такого приложения в Facebook, как это.https://github.com/jodosha/redis-store например, дает вам объект Sinatra «кеш», в котором вы можете хранить сериализованные объекты. И вы можете установить срок действия для ключей redis, чтобы память не накапливалась слишком много.Я бы порекомендовал использовать uid facebook в качестве ключа для кэша, так что независимо от того, какой компьютер / браузер использует пользователь, его сеанс всегда будет одинаковым.Кроме того, таким образом вам не нужно беспокоиться об установке файлов cookie в iframes, которые не работают в Safari и Chrome.

До фильтра: @session = cache.fetch("session-#{@uid}") { {} }

После фильтра: cache.set("session-#{@uid}", @session)

...