У меня есть функция LoginActivity, которая получает имя пользователя и пароль. Я пытаюсь получить токен аутентификации, используя POST Retrofit 2 и OkHTTP. Я создал службу, которая строит адаптер для модернизации, а также клиент OkHttp. У меня есть интерфейс, но здесь возникают мои проблемы.Идентификация входа в Android с помощью дооснащения
Я должен опубликовать свои учетные данные (имя пользователя и пароль из входа) в FormEncodedURL на сервер, чтобы получить токен, который у меня есть POJO для вызываемого AccessToken. Я действительно не уверен, что я делаю это правильно с помощью метода обратного вызова и т.д.
URL-адрес должен выглядеть http://xxxxxxxxxxxxxxxx/token/username=smcnary%40metrostudy.com&password=xxxxxx&grant_type=password
Пожалуйста, дайте мне знать, если есть что-нибудь еще нужно, чтобы помочь мне в отношении этой должности так как я довольно новичок в разработке Android и сложены.
Мой POST вызов выглядит следующим образом:
@POST("token")
Call<AccessToken> getAuthToken(@Body User user);
Если модель Пользователь:
public class User {
@SerializedName("password")
String password;
@SerializedName("username")
String email;
String grantType;
public User(String email, String password, String grantType) {
this.email = email;
this.password = password;
this.grantType = grantType;
}}
И маркер доступа Модель:
public class AccessToken {
private String accessToken;
private String tokenType;
private Integer expiresIn;
private String name;
private String title;
private String picImageBase64String;
private String Issued;
private String Expires;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getTokenType() {
return tokenType;
}
public void setTokenType(String tokenType) {
this.tokenType = tokenType;
}
public Integer getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(Integer expiresIn) {
this.expiresIn = expiresIn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPicImageBase64String() {
return picImageBase64String;
}
public void setPicImageBase64String(String picImageBase64String) {
this.picImageBase64String = picImageBase64String;
}
public String getIssued() {
return Issued;
}
public void setIssued(String Issued) {
this.Issued = Issued;
}
public String getExpires() {
return Expires;
}
public void setExpires(String Expires) {
this.Expires = Expires;
}
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
Вот логика в Входные данные
public void login() {
Log.d(TAG, "Login");
if (!validate()) {
onLoginFailed();
return;
}
_loginButton.setEnabled(false);
final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this,
R.style.AppTheme);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Authenticating...");
progressDialog.show();
String email = _emailText.getText().toString();
String password = _passwordText.getText().toString();
String grantType = "grant_type=password";
User user = new User(email, password, grantType);
Call<AccessToken> call = figgApiService.getAuthToken(user);
call.enqueue(new Callback<AccessToken>() {
@Override
public void onResponse(Call<AccessToken> call, Response<AccessToken> response) {
int statusCode = response.code();
AccessToken accesstoken = response.body();
}
@Override
public void onFailure(Call<AccessToken> call, Throwable t) {
}
});
Просто попробуйте, поставить точку останова в вашем onResponse, и если он никогда не будет там, затем он пошел в onFailure. Почему ваш URL-адрес передает пароль подобным образом, вы должны иметь его в теле почтовых данных – CQM