Reputation: 79
I'm new on Spring Social API, I'm trying to login my application by facebook, but it's not redirecting me to my domain url.
My application is running on two servers, which is based on restcontroller with ajax form submitted. One is apache web server and another one is tomcat server.
But not my facebook authentication is based on restcontroller, if the user need to login by facebook ID then he can just simply click on login with facebook button and page successfully redirecting to facebook login pate, but not redirect back to the requested URL.
My Code as under:
Login with Facebook@RequestMapping(value = "/fbauth", method = RequestMethod.GET) public void fbredirect(@RequestParam Map requestParams) throws UnsupportedEncodingException { String accessToken = null; // String accessToken = // "CAAFv5tfCxvsBAMkGz7Mz63ESCLEK3jgZBEZAZBqlj3CApIyqmvA5hOrtl9Ln05O3BRTcx95TjT9IxZBfRz3fKZBjNJ74qko1SFjjzAXmdDnzVePmGXswOM8NHEGTZA6aub7bnZBYBIMO2ZBXX2gpo6ky7Dkqu2xZBUymAalAgg3ixaRQMe3e3w1ruUtVeyQrtMb3x0pehHOIaTQZDZD"; RestTemplate restTemplate = new RestTemplate(); Map result = null; if (StringUtils.isEmpty(accessToken)) { for (String key : requestParams.keySet()) { Object value = requestParams.get(key); logger.info("Key: " + key + " value: " + value); }
String code = requestParams.get("code");
if (StringUtils.isNotEmpty(code)) {
String authUrl = "http://" + request.getServerName() + "/realtybud/fbauth";
StringBuilder stringBuilder = new StringBuilder();
String fbAuthApi = "https://graph.facebook.com/v2.3/oauth/access_token?client_id=";
stringBuilder.append(fbAuthApi);
stringBuilder.append(selectAppId());
stringBuilder.append("&redirect_uri=");
stringBuilder.append(authUrl);
stringBuilder.append("&client_secret=");
stringBuilder.append(selectAppSecret());
stringBuilder.append("&code=");
stringBuilder.append(code);
String fbGraphUrl = stringBuilder.toString();
result = restTemplate.getForObject(fbGraphUrl, Map.class);
accessToken = result.get("access_token");
logger.info("Access Token: " + accessToken);
}
}
StringBuilder stringBuilder = new StringBuilder();
String fbGraphApi = "https://graph.facebook.com/v2.3/me?fields=id,name,email&access_token=";
stringBuilder.append(fbGraphApi);
stringBuilder.append(accessToken);
String fbProfileInfo = stringBuilder.toString();
// String info = restTemplate.getForObject(fbProfileInfo, String.class);
// logger.info("Info: " + info);
Map<String, String> info = restTemplate.getForObject(fbProfileInfo, Map.class);
logger.info("Id: " + info.get("id") + " name: " + info.get("name") + " email: " + info.get("email"));
String email = info.get("email");
if (StringUtils.isNotEmpty(email)) {
User user = userService.findUserByEmail(email);
if (user == null) {
user = new User();
user.setEmail(email);
user.setFacebookAccessToken(accessToken);
user.setFacebookName(info.get("name"));
userService.userSave(user);
Role userRole = new Role();
userRole.setRoleName("ROLE_USER");
userRole.setUser(user);
userService.roleSave(userRole);
List<Role> roles = new ArrayList<Role>();
roles.add(userRole);
user.setRoles(roles);
} else {
user.setFacebookAccessToken(accessToken);
user.setFacebookName(info.get("name"));
userService.userSave(user);
}
SecurityUser secUser = new SecurityUser(user);
Authentication authentication = new UsernamePasswordAuthenticationToken(secUser, secUser.getPassword(),
secUser.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
} else {
// error
}
// String fbAuthSuccessUrl = "/index?fbAuth=success";
//return "redirect:/";
}
Please help me how can I redirect to apache web server with login credentials.
Thanks in advance. Waqas
Upvotes: 0
Views: 296
Reputation: 1802
I solved my problem with changing redirect Url in my web server (nginx in my case), I don't know this is the best way (or even appropriate) or not!
Upvotes: 0