sure, just a few days Amedeo On 06/set/2013, at 17:21, Miguel Torres <[email protected]> wrote:
> Please share it. > > I would be glad to help to make it a framework. > > Miguel Torres > > On 06/09/2013, at 02:52, Amedeo Mantica <[email protected]> wrote: > >> I did also Google/Yahoo OpenID authentication >> >> Would be cool to make it as a framework, it's not too hard to do. >> >> If you need the OpenID code too, feel free to ask >> >> Amedeo >> >> On 05/set/2013, at 17:21, Jesse Tayler <[email protected]> wrote: >> >>> >>> 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]
