2013-09-29 1 views
0

Мне нужно изменить файл cookie с типа «Session» на «Persistent». Кроме того, мне нужно, чтобы он работал вместе с «omniauth-facebook». В приведенном ниже примере все работает хорошо, но когда я использую omniauth, cookie не установлен вообще. Это тестовый код, который я написал:Почему cookie не работает с использованием Sinatra и Omniauth?

 
require 'rubygems' 
require 'sinatra' 
require 'encrypted_cookie' 
require 'omniauth-facebook' 
use Rack::Session::EncryptedCookie, :secret => "fdstopitot9dasdsdasjm4kmt0èu54cmjff83d2'ìel.4j9c" 
use OmniAuth::Builder do 
    provider :facebook, '290594154312564','a26bcf9d7e254db82566f31c9d72c94e' 
end 
get "/" do 
    "persistent | session | /auth/facebook" 
end 
get "/persistent" do 
    response.set_cookie 'test', {:value=> "persistent", :max_age => 2592000.to_s} 
    redirect "/" 
end 
get "/session" do 
    response.set_cookie 'test', {:value=> "session"} 
    redirect "/" 
end 
get '/auth/:provider/callback' do 
    response.set_cookie 'test', {:value=> "facebook_callback"} 
    redirect "/" 
end 

Нажатие на /session или /persistent вы можете увидеть куки изменения соответственно (в Chrome вы можете проверить печенье с F12> Ресурсы> Печенье> локального хоста).

Щелчок вместо этого на /auth/facebook cookie не установлен вообще.

Заголовок ответа выглядит нормально (в Chrome вы можете увидеть заголовок ответа HTTP с заголовком F12> Network>). Я только тестировал его с Chrome.

 
HTTP/1.1 302 Moved Temporarily 
X-Frame-Options: SAMEORIGIN 
Location: http://localhost:4567/ 
X-XSS-Protection: 1; mode=block 
Content-Type: text/html;charset=utf-8 
Content-Length: 0 
Set-Cookie: test=facebook_callback 
Set-Cookie: rack.session=X8U8kupLYzIurjMS4pSCQfF%2BzPpjQhJMqyMd84o8BQdQLwmhagL1UkZ4oi7%2F%0A9bEN%2B0FZDDUAeQD%2BRizczwvepQi%2FbcMwaAjpkFcXhiWuJPQ%3D%0A; path=/ 
X-Content-Type-Options: nosniff 
Connection: keep-alive 
Server: thin 1.5.1 codename Straight Razor 

Любые подсказки?

+0

Is было нетривиальной задачей, просто добавьте путь к куки: response.set_cookie 'тест', {: значение => "facebook_callback",: путь => "/"} Должен ли я снять вопрос ? – Lucamug

+0

Вы можете написать свой ответ и принять его; другие могут оказаться полезными в будущем. –

ответ

0

Is было нетривиальной задачей, просто добавьте путь к куки: response.set_cookie 'тест', {: значение => "facebook_callback",: путь => "/"}

Причина, почему я не заметил, что есть перенаправление на «/», поэтому Chrome показывал мне только файлы cookie для пути «/». Изменив перенаправление, я заметил, что у меня есть два файла cookie с именем «test». Один с дорожкой «/», а другой - с «/ auth».

Смежные вопросы