Я создаю смс для входа в систему с помощью набора учетных записей Facebook, java и jwt token, кажется, что он работает нормально, но я не могу добавить пользователя с длинным идентификатором к заявкам на предъявителя токена как к югу.
это мой код службы Facebook, я могу найти пользователя или создать пользователя, но я не знаю, как найти длинный идентификатор пользователя из findByAccountKit.
public FBToken authorizeToken(String appId, String appSecret, String code) throws FacebookException {
String authUrl = this.environment.getProperty(FacebookConstant.CONFIG_FB_GRAPH_AK_URL_ACCESS_TOKEN)
+ "?grant_type=authorization_code&code=" + code + "&access_token=AA|" + appId + "|" + appSecret;
log.info("authUrl : " + authUrl );
Object obj = this.restTemplate.getForObject(authUrl, Object.class);
@SuppressWarnings("unchecked")
Map<String, Object> info = (HashMap<String,Object>) obj;
String user_id = (String) info.get("id");
String user_access_token = (String) info.get("access_token");
String me_endpoint_uri = this.environment.getProperty(FacebookConstant.CONFIG_FB_GRAPH_AK_URL_ME) + "?access_token=" + user_access_token;
Object me = restTemplate.getForObject(me_endpoint_uri,Object.class);
//Set Phone User Object
@SuppressWarnings("unchecked")
Map<String, Object> map = (HashMap<String,Object>) me;
@SuppressWarnings("unchecked")
Map<String, Object> phone = (HashMap<String,Object>) map.get("phone");
String number = (String) phone.get("number");
String acccountKit = (String) info.get("id");
User userSMS = userRepository.findByAcccountKit(acccountKit);
if (userSMS == null) {
// Sign up user and login
User user = new User();
user.setAcccountKit(user_id);
user.setPhoneNumber(number);
user.setToken(user_access_token);
System.out.println(user);
User result = userRepository.save(user);
}
FBToken response= new FBToken();
try {
response = this.restTemplate.getForObject(authUrl, FBToken.class);
} catch (Exception e) {
// TODO: handle exception
log.error(e);
}
System.out.println(response);
log.info("Token : " + code + " | response : " + response);
return response;
}
public String getRegisteredMobileNumberToken(String code) throws FacebookException {
return null;
}
public User authorizeToken(String code, String mobile) throws FacebookException {
User login = new User();
FBToken fbToken = authorizeToken(this.environment.getProperty(FacebookConstant.CONFIG_FB_GRAPH_AK_APP_ID),
this.environment.getProperty(FacebookConstant.CONFIG_FB_GRAPH_AK_APP_SECRET), code);
if(fbToken.getAccess_token() == null) {
login.setUsername(mobile);
}
return login;
}
это моя конечная точка для входа в систему и регистрации пользователей
@Validated
@RestController
@RequestMapping(value = "/login/fb")
public class LoginFBController {
@Autowired
private JwtTokenHandler jwtTokenHandler;
@Autowired
private AccountKitService accountKitService;
@PostMapping("/ak")
public APIResponse loginViaFB(@RequestParam String mobile, @RequestParam String code) throws FacebookException {
return manipulateLoginResponse(this.accountKitService.authorizeToken(code, mobile));
}
private APIResponse manipulateLoginResponse(User user){
APIResponse apiResponse = new APIResponse();
if (user.getUsername() == null) {
apiResponse.setMessage("Authentication failed");
apiResponse.setStatus(false);
apiResponse.setStatusCode(HttpStatus.UNAUTHORIZED.value());
} else {
String token = jwtTokenHandler.generate(user.getUsername(), user.getAcccountKit());
apiResponse.setAccessToken(token);
apiResponse.setTokenType("Bearer");
apiResponse.setMessage("Authenticated");
apiResponse.setStatus(true);
apiResponse.setStatusCode(HttpStatus.OK.value());
}
return apiResponse;
}
}
Это мой дескриптор токена генерировать и проверять
public String generate(String username) {
Claims claims = Jwts.claims().setSubject(username);
Date now = new Date();
Date expiryDate = new Date(now.getTime() + jwtExpirationInMs);
return Jwts.builder()
.setIssuedAt(new Date())
.setExpiration(expiryDate)
.setClaims(claims)
.signWith(SignatureAlgorithm.HS512, jwtSecret)
.compact();
}
public JwtUserDetails validate (String token) {
JwtUserDetails jwtUserDetails = null;
try {
Claims body = Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token).getBody();
jwtUserDetails = new JwtUserDetails(body.getSubject(), token);
} catch (Exception e) {
e.printStackTrace();
}
return jwtUserDetails;
}
Код работает для генерации и проверки токена, но я бы хотел добавить длинный идентификатор пользователя в заявки, тогда было бы легко найти пользователя по идентификатору. У кого-нибудь есть идея? спасибо.