Es ist ein interessantes Problem, wirklich, für alle, die Sie Devise Meister Sie dort.Devise Sitzung zurücksetzen auf externe Quelle POST-URL
Wir haben Setup mit OmniAuth eingerichtet, aber das Problem tritt unabhängig davon auf, ob Sie über Facebook angemeldet sind oder über einen normalen Benutzernamen eingeloggt sind. Was passiert, ist ein Flash-Spiel, das auf unserer Website eingebettet ist. Wenn Sie das Spiel fertig zu spielen, wird das Spiel Ihre Punktzahl in dem Rails-Backend einreichen:
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);
Die URL wird an unsere URL gesendet. Der Controller (die Bestenlisten sind unter Spielen verschachtelt) ruft die URL-Informationen in der submitLeaderboardStatistic-Methode ab. Diese Methode beschäftigt sich mit der Information. Bei dieser Methode rufe ich current_user
an, um den aktuellen Benutzer zu erhalten, der das tatsächliche Ergebnis übermittelt hat. Problem ist, current_user gibt nil zurück.
Offensichtlich, was passiert, ist, sobald das Spiel startet die URL-POST-Anfrage, entwirft die Sitzung ungültig (oder etwas), so kann ich nicht sagen, wer die Punktzahl eingereicht.
Warum wird der aktuelle angemeldete Benutzer "gestartet", sobald das Flash Game die URL sendet? Wie kann ich das beheben, damit ich sagen kann, dass "Benutzer XXX diese Punktzahl eingereicht hat"?
Vielen Dank!
Rails 3.2.2
Rubin: 1.9.2
Devise: 1.5.3
Das ist eigentlich die Ursache (ich habe es vor einer Weile herausgefunden). Die POST-Anfrage hat/hat/kein gültiges CSRF-Token, daher wurde die Sitzung zurückgesetzt. Am Ende habe ich das CSRF-Token in die Flash-Anwendung eingegeben, und es verwendet es, wenn es die Anfrage sendet. Dies ist die richtige Antwort. –