Great -

This should be in the wiki !

I’m also interested in this and would like to try it out so if other’s do not 
have the time, I could try my hand at making a wiki page for it…or I offer help 
if someone taking that on would like help!




On Sep 5, 2013, at 11:09 AM, Miguel Torres <[email protected]> wrote:

> Thank you very much Amedeo.
> 
> We will try it.
> 
> Best Regards.
> 
> 
> On 05/09/2013, at 04:24, Amedeo Mantica <[email protected]> wrote:
> 
>> So, here how you get a FaceBook login for your WO Apps
>> 
>> example: 
>> http://www.digitmovies.com/Apps/WebObjects/digitmovies.woa/wa/customerLoginPage
>> 
>> Amedeo
>> 
>> 
>> 1) Login on FaceBook, and create a FaceBook application
>> or better create two facebook Application, one for development and one for 
>> production
>> 
>> <Pasted_Image_05_09_13_11_07.jpg>
>> 
>> 
>> <Pasted_Image_05_09_13_11_08.jpg>
>> 
>> 
>> 2) read this
>> 
>> https://developers.facebook.com/docs/reference/api/field_expansion/
>> 
>> 3) Code
>> 
>> 3.1)
>> 
>> This is the sction for the WOHyperLink that redirects the user to the 
>> facebook login
>> 
>>      public WOActionResults facebookLogin() {
>>              ERXRedirect redirect = new ERXRedirect(context());
>>              
>>              String url = "https://www.facebook.com/dialog/oauth?client_id="; 
>> + System.getProperty("facebookAppId") + "&redirect_uri=" + 
>> System.getProperty("facebookReturnUrl") + 
>> context().directActionURLForActionNamed("fbLogin", null) + "&scope=email";
>>              
>>              redirect.setUrl(url);
>>              return redirect;
>>      }
>> 
>> NOTE: the directaction fbLogin code is balow
>> System.getProperty("facebookAppId") is your appId
>> System.getProperty("facebookReturnUrl") is the return url, for me (in 
>> development): facebookReturnUrl=http://amedeo.lan.insigno.it:18965
>> 
>> 
>> when the user clicks here, if is the First time he will be asked to approve, 
>> otherwise will get automatically logged in
>> 
>> 
>> 3.2)
>> 
>> 
>> 3.2.1) DirectAction
>> 
>>      /** DirectAction callback from Facebook provider */
>>      public WOActionResults fbLoginAction() {
>>              return ((Session) 
>> session()).getUserController().executeFaceBookAuthentication(request());     
>>          
>>      }
>> 
>> 
>> 3.2.2) UserController
>> 
>> put executeFaceBookAuthentication() whatever you want, I have mine in the 
>> UserController class
>> 
>> 
>> 
>>      public WOActionResults executeFaceBookAuthentication(WORequest request) 
>> {
>>              
>>              try {
>>                      String authCode = 
>> (String)request.formValueForKey("code");
>>                      if ( this._authenticateUser( authCode , 
>> request.context() ) ) {
>>                              
>>                              if ( this.isCustomerAuthenticated() ) {
>>                                      return 
>> WOApplication.application().pageWithName("DMCustomerLandingPage", 
>> request.context());
>>                              }
>>                              
>>                              return 
>> WOApplication.application().pageWithName("DMCustomerSubscriptionPage", 
>> request.context());
>>                      }
>> 
>>              } catch (Exception e) {
>>                      //
>>              }
>>              return 
>> WOApplication.application().pageWithName("DMCustomerLoginPage", 
>> request.context());
>>      }
>>      
>>      
>>      /* Authentication by Facebook*/
>>      private Boolean _authenticateUser(String authCode, WOContext context) {
>>              
>>              log.info("authCode: " + authCode);
>>              
>>              String requestUrl = 
>> "https://graph.facebook.com/oauth/access_token?client_id="; + 
>> System.getProperty("facebookAppId") + "&redirect_uri=" + 
>> System.getProperty("facebookReturnUrl") + 
>> context.directActionURLForActionNamed("fbLogin", null) + "&client_secret=" + 
>> System.getProperty("faceBookAppSecret") + "&code=" + authCode;
>>              
>>              String token = null;
>>              
>>              DefaultHttpClient httpClient = new DefaultHttpClient();
>>              HttpGet httpget = new HttpGet(requestUrl);
>>              
>>              try {
>>                      HttpResponse authResponse = httpClient.execute(httpget);
>>                      //log.info("authResponse: " + 
>> authResponse.getStatusLine());
>>                      
>>                      HttpEntity entity = authResponse.getEntity();
>>                      
>>                      if (entity != null) {
>>                           InputStream instream = entity.getContent();
>>                           try {
>> 
>>                               BufferedReader reader = new BufferedReader(new 
>> InputStreamReader(instream));
>>                               // do something useful with the response
>>                               //System.out.println("TOKEN: " + 
>> reader.readLine());
>>                               token = reader.readLine();
>>                               
>>                           } catch (IOException ex) {
>> 
>>                               // In case of an IOException the connection 
>> will be released
>>                               // back to the connection manager automatically
>>                               ex.printStackTrace();
>>                               throw ex;
>> 
>>                           } catch (RuntimeException ex) {
>> 
>>                               // In case of an unexpected exception you may 
>> want to abort
>>                               // the HTTP request in order to shut down the 
>> underlying
>>                               // connection and release it back to the 
>> connection manager.
>>                               httpget.abort();
>>                               throw ex;
>> 
>>                           } finally {
>> 
>>                               // Closing the input stream will trigger 
>> connection release
>>                               instream.close();
>>                           }
>> 
>>                           // When HttpClient instance is no longer needed,
>>                           // shut down the connection manager to ensure
>>                           // immediate deallocation of all system resources
>>                           httpClient.getConnectionManager().shutdown();
>>                       }
>>                      
>>              } catch (Exception e) {
>>                      e.printStackTrace();
>>              }
>>              
>>              log.debug("TOKEN: " + token);
>>              __faceBookToken = token;
>>              String jsonOut = null;
>>              
>>              if (token!=null) {
>> 
>>                      httpClient = new DefaultHttpClient();
>>                      
>>                      requestUrl = "https://graph.facebook.com/me?"; + token;
>>                      httpget = new HttpGet(requestUrl);
>>                      
>>                      try {
>> 
>>                              HttpResponse authResponse = 
>> httpClient.execute(httpget);
>>                              HttpEntity entity = authResponse.getEntity();
>>                              
>>                              if (entity != null) {
>>                                   InputStream instream = entity.getContent();
>>                                   
>>                                   int length = new 
>> Long(entity.getContentLength()).intValue();
>>                                   
>>                                   byte[] b = new byte[length];
>>                                   instream.read(b);
>>                                   new String(b);
>>                                   jsonOut = new String(b);
>>                                   log.debug(jsonOut);
>>                              }
>>                              
>>                      } catch (Exception e) {
>>                              e.printStackTrace();
>>                      }
>>                      
>>              }
>>              
>>              String email = null;
>>              String firstName = null;
>>              String lastName = null;
>>              
>>              if (jsonOut!=null) {
>>                      
>>                      log.debug("L: " + jsonOut.length());
>>                      JSONParser parser = new JSONParser();
>>                      try {
>>                              
>>                              org.json.simple.JSONObject obj = 
>> (org.json.simple.JSONObject) parser.parse(jsonOut);
>>                              
>>                              email = (String) obj.get("email");
>>                              firstName = (String) obj.get("first_name");
>>                              lastName = (String) obj.get("last_name");
>>                              
>>                              
>>                              
>>                      } catch (ParseException e) {
>>                              System.out.println("position: " + 
>> e.getPosition());
>>                          System.out.println(e);
>>                      } catch (Exception e) {
>>                              e.printStackTrace();
>>                      }
>>                      
>>              }
>>              
>> 
>> /* THE CODE BELOW HERE DEPENDS ON YOUR USERS DATABASE  */
>>              
>>              try {
>>                      DMCustomer customer = (DMCustomer) 
>> EOUtilities.objectMatchingKeyAndValue(_session.defaultEditingContext(), 
>> DMCustomer.ENTITY_NAME, DMCustomer.EMAIL_KEY, email);
>>                      _authenticatedCustomer = customer;
>>                      
>> _authenticatedCustomer.setAuthMethod(AuthMethod.FACEBOOK);
>>                      return Boolean.TRUE;
>>                      
>>              } catch (EOObjectNotAvailableException e) {
>>                      
>>                              DMCustomer newCustomer = (DMCustomer) 
>> EOUtilities.createAndInsertInstance(_session.defaultEditingContext(), 
>> DMCustomer.ENTITY_NAME);
>>                              newCustomer.setEmail(email);
>>                              newCustomer.setName(firstName);
>>                              newCustomer.setSurname(lastName);
>>                              
>>                              _session.defaultEditingContext().saveChanges();
>>                              
>>                              _authenticatedCustomer = newCustomer;
>>                              
>> _authenticatedCustomer.setAuthMethod(AuthMethod.FACEBOOK);
>>                              return Boolean.TRUE;
>>                              
>>              } catch (EOUtilities.MoreThanOneException e) {
>>                              log.error("Duplicate entry in customers 
>> database!");
>>                              e.printStackTrace();
>>                              _authenticatedCustomer = null;
>>                              return Boolean.FALSE;
>>              }
>>              
>>      }
>> 
>> 
>> 
>> Best
>> Amedeo
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/jtayler%40oeinc.com
> 
> This email sent to [email protected]

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to