No message available при авторизации через Яндекс
Я делаю авторизация через Яндекс в Spring. Вот мой код:
@CrossOrigin
@RequestMapping(value = "/goYandex", method = RequestMethod.GET)
// @ResponseBody
public void autorithationYandex(@RequestParam(value = "code", required = true) String code,
/* HttpSession session,*/
Authentication authentication,
HttpServletRequest req,
HttpServletResponse redirectResponse
) throws IOException {
String urlCabinet = /*methodHostName()+":"+vPort+*/"/";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("grant_type", "authorization_code");
map.add("code", code);
map.add("client_id", "id");
map.add("client_secret", "secret");
HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(map, headers);
ResponseEntity<String> response =
restTemplate.exchange("https://oauth.yandex.ru/token",
HttpMethod.POST,
entity,
String.class);
String strResponse = response.getBody().toString();
ObjectMapper mapper = new ObjectMapper();
JsonToken jt = mapper.readValue(strResponse, JsonToken.class);
String token = jt.getAccess_token();
String url2 = "https://login.yandex.ru/info?format=json&oauth_token=" + token;
// create an instance of RestTemplate
RestTemplate restTemplate2 = new RestTemplate();
// make an HTTP GET request
JsonUserInformation response2 = restTemplate.getForObject(url2, JsonUserInformation.class);
String firstName = response2.getFirst_name();
String secondName = response2.getLast_name();
String Email = response2.getDefault_email();
String Photo = response2.getDefault_avatar_id();
String Login = response2.getLogin();
Long External_ID = response2.getId();
User user = new User();
user.setFirstName(firstName);
user.setSecondName(secondName);
user.setEmail(Email);
user.setLogin(Login);
user.setExternalId(External_ID);
user.setActive(true);
Role role=new Role() ;
// role.addUser(user);
User searchUser=usersRepository.findByLogin(Login);
if (searchUser == null)
{
role = rolesRepository.findUserRole();
}
if (searchUser != null)
{
role=searchUser.getRole();
}
user.setRole(role);
if (searchUser == null)
{
usersRepository.save(user);
}
MyUserPrincipal myUserPrincipal = new MyUserPrincipal(user);
Authentication auth = new UsernamePasswordAuthenticationToken(myUserPrincipal, null, myUserPrincipal.getAuthorities());
SecurityContext securityContext = SecurityContextHolder.getContext();
securityContext.setAuthentication(auth);
HttpSession session = req.getSession(true);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
redirectResponse.sendRedirect(urlCabinet);
}
Когда я запускаю этот код на localhost всё работает нормально. Но когда я пытаюсь авторизоваться через Яндекс на heroku. Мне выдаёт следующее:
Endpoint на Яндексе я поменял на url своего приложения на хироку. Подскажите с чем может быть связана данная проблема.
