2010-08-13 8 views
7

Sto imparando usando Play Framework e facendo un'app demo per questo.Libreria per integrare l'accesso a Facebook con Play Framework?

Per questa app voglio anche integrarmi con l'API di Facebook, consentendo agli utenti di accedere utilizzando gli ID di Facebook. Sapendo che Play è una struttura senza stato e il modo in cui funziona, c'è qualche libreria o modulo consigliato?

Non sono riuscito a trovarne, ma chiedo per ogni evenienza.

risposta

3

C'è ora anche un modulo fbconnect elencato sul sito di Play.

+0

sì, aggiunto al 1.1. Grazie :) –

10

L'ultimo gioco! Framework v1.2.2 contiene un esempio con il protocollo Facebook OAuth2.

Ecco un controller di applicazione con l'autenticazione OAuth2:

import models.User; 
import play.Logger; 
import play.libs.OAuth2; 
import play.libs.WS; 
import play.mvc.Before; 
import play.mvc.Controller; 

import com.google.gson.JsonObject; 

public class Application extends Controller { 

    // The following keys correspond to a test application 
    // registered on Facebook, and associated with the loisant.org domain. 
    // You need to bind loisant.org to your machine with /etc/hosts to 
    // test the application locally. 

    public static OAuth2 FACEBOOK = new OAuth2(
      "https://graph.facebook.com/oauth/authorize", 
      "https://graph.facebook.com/oauth/access_token", 
      "95341411595", 
      "8eff1b488da7fe3426f9ecaf8de1ba54" 
    ); 

    public static void index() { 
     User u = connected(); 
     JsonObject me = null; 
     if (u != null && u.access_token != null) { 
      me = WS.url("https://graph.facebook.com/me?access_token=%s", WS.encode(u.access_token)).get().getJson().getAsJsonObject(); 
     } 
     render(me); 
    } 

    public static void auth() { 
     if (OAuth2.isCodeResponse()) { 
      User u = connected(); 
      OAuth2.Response response = FACEBOOK.retrieveAccessToken(authURL()); 
      u.access_token = response.accessToken; 
      u.save(); 
      index(); 
     } 
     FACEBOOK.retrieveVerificationCode(authURL()); 
    } 

    @Before 
    static void setuser() { 
     User user = null; 
     if (session.contains("uid")) { 
      Logger.info("existing user: " + session.get("uid")); 
      user = User.get(Long.parseLong(session.get("uid"))); 
     } 
     if (user == null) { 
      user = User.createNew(); 
      session.put("uid", user.uid); 
     } 
     renderArgs.put("user", user); 
    } 

    static String authURL() { 
     return play.mvc.Router.getFullUrl("Application.auth"); 
    } 

    static User connected() { 
     return (User)renderArgs.get("user"); 
    } 

} 

Enjoy!