Я согласен, что вы ожидаете, что Devise установит сессию до того, как запрос отправится в FB.Я предполагаю, что это отсутствующая особенность Devise.
У меня была проблема сама, где я использовал token_authenticatable.Клиент API напрямую вызывал следующий URL:
/users/auth/facebook?auth_token=TnMn7pjfADapMdsafOFIHKgJVgrBEbjKqrubwMXUca0n16m3Hzr7CnrP1s4z
Так как я использовал token_authenticatable, я предполагал, что это войдет в систему пользователя.К сожалению, это не работает из коробки.Чтобы это работало, вам нужно убедиться, что пользователь вошел в систему, прежде чем он попадет по этому пути.Вы можете сделать это другими способами, но самый простой способ - присвоить клиенту API другой URL-адрес (в данном случае «users / connect / facebook»). Вот мое дополнение к файлу маршрутов, которое заставляет его работать (при условии, что у вас естьпользовательская модель с устройством devise, и вы не изменили значения по умолчанию):
authenticate :user do
get 'users/connect/:network', :to => redirect("/users/auth/%{network}")
end
Это обеспечит правильное создание сеанса, чтобы пользователь узнал его по возвращении из Facebook.