2014-02-18 5 views
2

Оказалось, что получение идентификатора сеанса (с session[:session_id]) после входа в систему с помощью Devise (подлинник gem) (либо в session_controller, либо в after_sign_in_path_for) не возвращает то же самое до и после перенаправления в первый раз, после входа в систему.Настройка сеанса рельсов ID

Может ли кто-нибудь объяснить мне, почему? Есть ли способ получить окончательный сеанс ID до перенаправление?

ответ

0

FYI ответ от Gee-Bee (https://github.com/Gee-Bee):

https://github.com/plataformatec/devise/issues/3706

Is anyone can explain me why ? 

Попробую. Короче говоря:

Devise has nothing to do with it 
Warden has something to do with it - it's setting :renew option on session, after setting user (proxy, spec) 
Actual action takes place in in Rake::Session::Abstract#commit_session which updates session_id (by 

вызова destroy_session и set_session implementented в ActionDispatch :: Session :: CookieStore)

Is there any way to get the final session ID before redirecting ? 

Конечно, это. Имейте в виду, что Warden меняет session_id после аутентификации для предотвращения атак на фиксацию сеанса, поэтому в override devise controller вы должны вручную изменить session_id в дополнение к отключить: обновить параметр сеанса. Это будет делать:

session.options [: ID] = session.instance_variable_get (: @ по) .generate_sid session.options [: возобновлять] = ложь

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