Я использую аутентификацию JWT в CakePHP для обработки действий при входе в Android App.Я отключил защиту CSRF в Cake и передавал значение токена через класс «SharedPreferencesConstants», где значение токена устанавливается с помощью кода, показанного ниже:
// Running default handler
new Handler().post(new Runnable() {
@Override
public void run() {
fcm = new MyFireBaseIntanceIdservice();
String token = fcm.getrefeshtoken();
// Log.e("test", token);
SharedPreferencesConstants.setTOKEN(LoginActivity.this, token);
}
});
Однако я попытался немного поиграть со значением токена.
На данный момент я получаю сообщение об ошибке «Ошибка: [Cake \ Http \ Exception \ InvalidCsrfTokenException] Отсутствует файл cookie CSRF-маркера».
Подходы, которые я до сих пор пробовал, отключают защиту CSRFв Cake AppController.
EditText txtEmail = (EditText) findViewById(R.id.txtEmail);
EditText txtPassword = (EditText) findViewById(R.id.txtPassword);
jsonObject.put("email", txtEmail.getText().toString());
jsonObject.put("password", txtPassword.getText().toString());
jsonObject.put("cookieName", "appname");
jsonObject.put("_Token", "_csrfToken");
jsonObject.put("deviceToken", SharedPreferencesConstants.getTOKEN(this));
jsonObject.put("secureKey", SharedPreferencesConstants.getSECUREKEY(this));
Мысль, которая пришла мне в голову как проектируемое решение, связана с HTTP-заголовком, который должен быть передан в запросе.Но я не смог найти никакого решения для этой мысли.
Любое решение / предложения?
Редактировать # 1: В моем файле AppController.php я загрузил только компонент безопасности, а не CSRF,Вот код для того же самого:
$this->loadComponent('Security');
// $this->loadComponent('Csrf');
И код, который у меня есть в моей функции CustomersController.php beforeFilter ():
$this->getEventManager()->off($this->Csrf);
Код аутентификации JWT, яв моем AppController есть:
$this->loadComponent('Auth', [
'storage' => 'Memory',
'authenticate' => [
'ADmad/JwtAuth.Jwt' => [
'userModel' => 'Customers',
'fields' => [
'username' => 'email'
],
'parameter' => 'token',
// Boolean indicating whether the "sub" claim of JWT payload
// should be used to query the Users model and get user info.
// If set to `false` JWT's payload is directly returned.
'queryDatasource' => false,
],
'unauthorizedRedirect' => false,
'checkAuthIn' => 'Controller.initialize',
// If you don't have a login action in your application set
// 'loginAction' to false to prevent getting a MissingRouteException.
'loginAction' => false
],
]);
Я надеюсь, что новый код, который я добавил, может помочь вам получить более полное представление о проблеме.