Модернизировать Войти через API - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь заставить этот логин работать, но по какой-то причине он всегда возвращает код 422, когда пытаюсь отправить данные для получения токена API. Я не уверен в процессе входа в систему и сохранении токена для дальнейшего использования.

Это настройка модернизации

Gson gson = new GsonBuilder().serializeNulls().create();

HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .addInterceptor(new Interceptor() {
        @NotNull
        @Override
        public okhttp3.Response intercept(@NotNull Chain chain) throws IOException {
            Request originalRequest = chain.request();
            Request newRequest = originalRequest.newBuilder()
                    .build();

            return chain.proceed(newRequest);
        }
    })
    .addInterceptor(loggingInterceptor)
    .build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.0.4:8000/api/")
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build();

    jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);

Это код, который у меня есть, это Api Интерфейс, модель входа в систему имеет только эти три поля с обычной настройкой модели

@FormUrlEncoded
@Headers({"Accept: application/json", "Content-Type: multipart/form-data"})
@POST("sanctum/token")
Call<Login> LoginUser(
        @Field("scard") String scard,
        @Field("password") String password,
        @Field("device_name") String device_name
);

Это код, в котором я пытаюсь выполнить вход в систему и получить токен, маршрут API возвращает это

{
  "user": {
    "id": 1,
    "name": "ny",
    "lastname": "gz",
    "maidenname": "ua",
    "card": "1192",
    "scard": "134",
    "email": "ny@gmail.com",
    "created_at": "2020-03-25 15:47:44",
    "updated_at": "2020-03-25 15:47:44"
  },
  "token": "M5VoPEhhow..."
}

Попытка входа в систему, ответ всегда 422

scardText = (EditText) findViewById(R.id.scardET);
passwordText = (EditText) findViewById(R.id.passwordET);

Button loginbtn = (Button) findViewById(R.id.loginbtn);

loginbtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String scardI = scardText.getText().toString();
        String passwordI = passwordText.getText().toString();
        String device_name = Settings.Secure.getString(getContentResolver(), "bluetooth_name");

        String loginNew = loginnew.toString();
        textViewResult.append(scardI + passwordI);

        Call<Login> call = jsonPlaceHolderApi.LoginUser(scardI, passwordI, device_name);

        call.enqueue(new Callback<Login>() {
            @Override
            public void onResponse(Call<Login> call, Response<Login> response) {
                if (!response.isSuccessful()) {
                    textViewResult.append("Code: " + response.code() + "\n");
                    return;
                }
            }

            @Override
            public void onFailure(Call<Login> call, Throwable t) {
                textViewResult.setText(t.getMessage());
            }
        });
    }
});

Это в logcat в AndroidStudio

 D/OkHttp: Content-Type: multipart/form-data
 D/OkHttp: Content-Length: 57
 D/OkHttp: Accept: application/json
 D/OkHttp: scard=134&password=password&device_name=Galaxy%20Note8
 D/OkHttp: --> END POST (57-byte body)
 D/TcpOptimizer: TcpOptimizer-ON
 D/OkHttp: <-- 422 Unprocessable Entity http://192.168.0.4:8000/api/sanctum/token (841ms)
 D/OkHttp: Host: 192.168.0.4:8000
 D/OkHttp: Date: Tue, 31 Mar 2020 18:27:47 GMT
 D/OkHttp: Connection: close
 D/OkHttp: X-Powered-By: PHP/7.3.10
 D/OkHttp: Cache-Control: no-cache, private
 D/OkHttp: Date: Tue, 31 Mar 2020 18:27:47 GMT
 D/OkHttp: Content-Type: application/json
 D/OkHttp: X-RateLimit-Limit: 60
 D/OkHttp: X-RateLimit-Remaining: 59
 D/OkHttp: <br />
 D/OkHttp: <b>Warning</b>:  Missing boundary in multipart/form-data POST data in <b>Unknown</b> on line <b>0</b><br />
 D/OkHttp: {"message":"The given data was invalid.","errors":{"scard":["The scard field is required."],"password":["The password field is required."],"device_name":["The device name field is required."]}}
 D/OkHttp: <-- END HTTP (308-byte body)
...