Я создаю приложение с аутентификацией при входе в систему через запросы API.
Я использую Retrofit 2 для выполнения запросов POST и GET.
Во-первых, мне нужен JWT (токен аутентификации).
Затем мне нужно проверить переменную в профиле пользователя.
У меня все работает: когда существующее письмо отправляется с соответствующим паролем (запрос POST), оно отправляет мне обратно токен пользователя (ответ POST).
Затем я отправляю токен пользователя (запрос GET) и ожидаю, что в отправленном мне теле (ответ GET) будут переменные, связанные с конкретным пользователем.
Проблема в том, что в неправильном запросе ответ body: null
Но я получил тело: {
имя: ноль
электронная почта: ноль
id: null
isCostumer: null
}
Я проверял использование Postman и других токенов для запроса GET.
атрибуты публичного класса {
@SerializedName("name")
@Expose
private String name;
@SerializedName("email")
@Expose
private String email;
@SerializedName("cpf")
@Expose
private String cpf;
(...)
(+ getters and setters)
}
открытый класс RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
открытый класс APIUtils {
private APIUtils() {}
public static final String BASE_URL = "http://api.adeodev.org/";
public static APIService getAPIService() {
return RetrofitClient.getClient(BASE_URL).create(APIService.class);
}
}
открытый интерфейс APIService {
@POST("/auth/users/login")
@FormUrlEncoded
Call<UserJWT> saveUserJWT(@Field("email") String email,
@Field("password") String password);
@GET("/user/inhabitants/me")
Call<FullUser.Attributes> saveFullUserAttributes (@Header("Authorization") String jwtToken);
}
открытый класс LoginActivity расширяет AppCompatActivity {
private static final String RETROFIT_POST = "Retrofit POST Request";
TextView testText;
EditText emailInput;
EditText passwordInput;
// EmailPassword Login
APIService mAPIService;
Button empasLoginButton;
// End of EmailPassword Login
// Facebook Login
LoginButton facebookLoginButton;
CallbackManager callbackManager;
// End of Facebook Login
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
testText = findViewById(R.id.login_testTextView_id);
emailInput = findViewById(R.id.login_emailinputplaintext_id);
passwordInput = findViewById(R.id.login_passwordinputpassword_id);
// EmailPassword Login
mAPIService = APIUtils.getAPIService();
empasLoginButton = findViewById(R.id.login_empasauthbutton_id);
empasLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String userEmail = emailInput.getText().toString().trim();
String userPassword = passwordInput.getText().toString().trim();
if(!TextUtils.isEmpty(userEmail) && !TextUtils.isEmpty(userPassword)) {
sendUserAuth(userEmail, userPassword);
}
}
});
public void sendUserAuth(String email, String password) {
mAPIService.saveUserJWT(email, password).enqueue(new Callback<UserJWT>() {
@Override
public void onResponse(Call<UserJWT> call, Response<UserJWT> response) {
if(response.isSuccessful() && response.body()!=null && response.body().getJwt()!=null) {
showResponse(response.body().toString());
Log.i(RETROFIT_POST, "post submitted to API. JWT: " + response.body().toString());
authCoworker(response.body().toString());
}
}
@Override
public void onFailure(Call<UserJWT> call, Throwable t) {
Log.e(RETROFIT_POST, "Unable to submit post to API.");
}
});
}
public void showResponse(String response) {
if(testText.getVisibility() == View.GONE) {
testText.setVisibility(View.VISIBLE);
}
testText.setText(response);
}
public void authCoworker(String jwtToken){
mAPIService.saveFullUserAttributes("Bearer "+jwtToken).enqueue(new Callback<FullUser.Attributes>() {
@Override
public void onResponse(Call<FullUser.Attributes> call, Response<FullUser.Attributes> response) {
if(response.isSuccessful() && response.body()!=null && response.body().getCoworker()!=null) {
if(response.body().getCoworker().equals(1)){
goToMain();
} else {
showResponse("Apenas funcionários podem usar este aplicativo."); // Only coworkers can use this app.
}
}
}
@Override
public void onFailure(Call<FullUser.Attributes> call, Throwable t) {
}
});
}
Я ожидал что-то вроде
body {
name: UserName
email: UserEmail
id: UserId
isCostumer: 0 for non-costumers, 1 for costumers
}
And with Postman, i got just that.
But in Android Studio, the result is
body {
name: null
email: null
id: null
isCostumer: null
}