Hello,
I'm trying to do something close but I try to keep using the spring-social signin mechanism.
However, I would like to facilitate signup when coming from twitter (or any other 3rd party), for example by automatically fill the accout name with the providerAccountId.
I've been looking for an easy way to get the data in the signup controller but without any success. Here is the dirty hack I use (for twitter only for the moment):
Code:@RequestMapping(value="/signup", method=RequestMethod.GET) public String signUp(Model model,WebRequest request) { ProviderSignInAttempt signInAttempt = (ProviderSignInAttempt) request.getAttribute(ProviderSignInAttempt.SESSION_ATTRIBUTE, WebRequest.SCOPE_SESSION); if (signInAttempt instanceof OAuth1ProviderSignInAttempt) { OAuth1ProviderSignInAttempt obj = (OAuth1ProviderSignInAttempt)signInAttempt; try { Field f = obj.getClass().getDeclaredField("accessToken"); f.setAccessible(true); String accessToken = (String) f.get(obj); Field f2 = obj.getClass().getDeclaredField("accessTokenSecret"); f2.setAccessible(true); String accessTokenSecret = (String) f2.get(obj); Field f3 = obj.getClass().getDeclaredField("serviceProviderLocator"); f3.setAccessible(true); AbstractOAuth1ServiceProvider<?> serviceProvider = (AbstractOAuth1ServiceProvider<?>)((Provider<? extends OAuth1ServiceProvider<?>>) f3.get(obj)).get(); Field f4 = serviceProvider.getClass().getSuperclass().getDeclaredField("consumerKey"); f4.setAccessible(true); String consumerKey = (String) f4.get(serviceProvider); Field f5 = serviceProvider.getClass().getSuperclass().getDeclaredField("consumerSecret"); f5.setAccessible(true); String consumerSecret = (String) f5.get(serviceProvider); TwitterTemplate t = new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret); //t.getProfileId()); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); }
Is there any "legal" way to do the same thing ?
Thanks
Shad


Reply With Quote
