Это интересная проблема, на самом деле, для всех, кого вы там разрабатываете Devise.
У нас есть настройка Devise с OmniAuth, но проблема возникает независимо от того, вошли ли вы через Facebook или вошли под обычным именем пользователя. Что происходит, у нас есть встроенная Flash-игра на нашем сайте. Когда вы закончите играть в игру, игра отправит ваш счет в бэкэнд Rails:
request = new URLRequest("http://mydomain.com:2012/games/1/leaderboards/13/submitLeaderboardStatistic");
request.method = URLRequestMethod.POST;
var loader : URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
var variables : URLVariables = new URLVariables();
variables.game_value = aScore;
variables.game_id = 1;
variables.unique_identifier = "com.onecoolgameaday.highscores";
variables.time_stamp = new Date();
request.data = variables;
loader.addEventListener(Event.COMPLETE, on_complete);
loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
loader.load(request);
URL отправляется на наш URL. Контроллер (Leaderboards вложены в Games) получает информацию URL в методе submitLeaderboardStatistic. Этот метод имеет дело с информацией. В этом методе я вызываю current_user
, чтобы получить текущего пользователя, который представил фактический счет. Проблема в том, что current_user возвращает ноль.
Очевидно, что происходит, когда игра запускает этот URL-запрос POST, разрабатывает недействительный сеанс (или что-то в этом роде), поэтому я не могу сказать, кто отправил счет.
Почему текущий вошедший в систему пользователь "вылетает" после того, как Flash Game отправляет URL? Как мне это исправить, чтобы я мог сказать «пользователь XXX отправил этот балл».
Спасибо!
Рельсы: 3.2.2
Рубин: 1.9.2
Придумайте: 1.5.3