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]
