2012-03-24 1 views
2

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

Antwort

1

Hat das Formular, das Sie einreichen, ein gültiges CSRF-Token? Ich denke, Devise ruft reset_session auf, wenn das csrf-Token ungültig ist oder nicht existiert.

+0

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. –

0

Try vollständige URL-Adresse auf die "/ Spiele/1/leaderboards/13/submitLeaderboardStatistic" einzustellen. Wahrscheinlich ist dies eine Cross-Domail-Richtlinie, die vom Server empfangen werden sollte, wenn Sie die POST-Methode für die andere Domäne verwenden.

+0

Aus Sicherheitsgründen habe ich nicht die vollständige URL auf Stack Overflow (aus dem Grund, dass Sie sagen). Die URL hat die Form "http://mydomain.com:2012/games/1/leaderboards/13/submitLeaderboardStatistic". Ich habe das OP aktualisiert, um dies zu reflektieren. Danke fürs Schreiben! –

Verwandte Themen