2010-11-25 10 views
0

Ich versuche, eine Leinwand Facebook-App mit Rails 3 und oauth2 zu machen. Es Art funktioniert gut folgenden Schritte hier https://github.com/intridea/oauth2Rails3, oauth2 und Leinwand Facebook-Anwendung - bleiben Sie in der FB Leinwand bitte

Also, wenn ich an die App in FB gehen, löst es die Set-Methoden von oauth2 ABER, fragt es den Benutzer die Berechtigungen außerhalb der Leinwand zu geben, es geht von FB. Dann, wenn der Benutzer Erlaubnis gibt, geht es dorthin, wo es in der Anwendung gehen soll, aber wieder alles AUSSEN FB.

Nach dem Erteilen der Berechtigungen, wenn ich auf die App innerhalb FB gehe, dann zeigt es die App innerhalb der Leinwand.

Wer kennt das?

Prost.

Antwort

0

Wie ich weiß, sollte die Seite, auf der Sie die Berechtigungen für die App erteilen, außerhalb der App-Seite liegen. Und wenn Sie wollen, als auf Ihre FB App-Seite umgeleitet wird, sollten Sie

access_token = client.web_server.get_access_token(params[:code], :redirect_uri => redirect_uri) 

def redirect_uri 
    uri = URI.parse(request.url) 
    uri.path = '/fbcanvas' 
    uri.query = nil 
    uri.to_s 
end 

redirect_uri Methode speziell hier verwendet wird, so dass, wenn Sie von Ihrer fb App-Seite weitergeleitet werden, Sie dorthin zurückkehren würden, und Wenn Sie von Ihrer Website selbst weitergeleitet werden, kehren Sie zu Ihrer Website zurück.

+0

Hallo, danke für die Überprüfung. Ich bekomme tatsächlich OAuth2 :: HTTPError (Empfangen von HTTP 400 während der Anfrage.) Redirect auf diese Weise ändern. – Pod

+0

Was ist die/fvcanvas, die Sie vorschlagen? Etwas Besonderes für deine App? Da ich keine solche Route habe. – Pod

+0

/fbcanvas ist nur eine meiner Stammadresse von Canvas-Seiten. OAuth2 :: HTTPError oder OAuth2 :: AccessDenied bedeuten, dass Sie nicht autorisiert sind. Wenn ich sie rettre, richte ich den Benutzer auf der fb-Auth-Seite zurück. Ich denke, du solltest näher FB-Dokumente lesen, auch oauth2-Edelstein-Quellen ansehen, sie sind eher klein, aber helfen zu verstehen, was zu tun ist in dem Mangel an Dokumenten. – sandrew

0

Ich habe tatsächlich Edelsteine ​​geändert.

Was ich jetzt benutze ist devise_oauth2_canvas_facebook gem.

Es funktioniert zusammen mit devise und fbgraph und es funktionierte ziemlich out of the box, also empfehle ich, dass für Canvas fb apps.

Und alles bleibt in der fb Leinwand :-)

Grüße.

0

Ich hatte das gleiche Problem und answered my own question. Sie müssen den folgenden Code zu application_contoller hinzufügen, wie auf der Seite OmniAuth Overview wiki. Aber achten Sie darauf, request.env ["HTTP_REFERER"] statt request.full_path zu verwenden.

def authenticate_user! 
    if !current_user 
    # This should work, but session is lost. See https://github.com/plataformatec/devise/issues/1357 
    # session[:return_to] = request.fullpath 
    redirect_to user_omniauth_authorize_path(:google_apps, :origin => request.env["HTTP_REFERER"]) 
    end 
end 

def after_sign_in_path_for(resource) 
    # This should work, but session is lost. See https://github.com/plataformatec/devise/issues/1357 
    # return_to = session[:return_to] 
    # session[:return_to] = nil 
    return_to = request.env['omniauth.origin'] 
    stored_location_for(resource) || return_to || root_path 
end