2016-03-24 2 views
0

У меня есть функция 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) { 

     } 
    }); 
+0

Просто попробуйте, поставить точку останова в вашем onResponse, и если он никогда не будет там, затем он пошел в onFailure. Почему ваш URL-адрес передает пароль подобным образом, вы должны иметь его в теле почтовых данных – CQM

ответ

0

Вы должны изменить свой интерфейс для этого:

@FormUrlEncoded 
@POST("token") 
Call<AccessToken> getAuthToken(@Field("username") String username, @Field("password") String password, @Field("grant_type") String grantType); 

И ваш звонок будет как этот:

Call<AccessToken> call = figgApiService.getAuthToken(email, password, grantType); 
Смежные вопросы