Я не могу получить токен снова только после того, как удалю данные пользователя - PullRequest
0 голосов

Я не могу получить токен снова только после удаления данных пользователя

Версия React Native:

Система: ОС: macOS 10.15.4 Процессор: (4) x64 Intel (R) Core (TM) i5-5250U CPU @ 1,60 ГГц Память: 232,47 МБ / 8,00 ГБ Оболочка: 3.2.57 - / bin / bash Двоичные файлы: Узел: 13.13.0 - / usr / local / bin / node Пряжа: 1.13.0 - / usr / local / bin / yarn npm: 6.14.4 - / usr / local / bin / npm Сторож: 4.9.0 - / usr / local / bin / watchman Менеджеры: CocoaPods: 1.9.1 - /Users/alexey/.rvm/rubies/ruby-2.6.1/bin/pod SDK: iOS SDK: Платформы: iOS 13.4, DriverKit 19.0, macOS 10.15, tvOS 13.4, watchOS 6.2 Android SDK: не найдено Иды: Android Студия: 3.6 АИ-192.7142.36.36.6308749 Xcode: 11.4.1 / 11E503a - / usr / bin / xcodebuild Языки: Java: 11.0.2 - / usr / bin / javac Python: 2.7.16 - / usr / bin / python npmPackages: @ response-native-community / cli: ^ 4.8.0 => 4.8.0 реагировать: 16.11.0 => 16.11.0 реагировать-родной: 0.62.2 => 0.62.2 npmGlobalPackages: реагировать-native: не найдено

Шаги для воспроизведения

  1. Я создал проект.
  2. Я отправил на сервер запрос на получение токена. Я получил его.
  3. Я отправил запрос на удаление токена с сервера.
  4. Я пытаюсь снова получить токен, но получаю ноль.
  5. После этого, Я вошел в информацию о приложении и удалил данные пользователя.

После этого я снова смог получить токен

https://i.imgur.com/7YGsg9m.gif

Ожидаемые результаты

Я не хочу каждый раз вручную удалять данные пользователя, чтобы получить токен. Это неудобно

Этот код работает в версии 0.59.9, но не работает в версии 0.62.2

Пример кода:

import React, { Component } from 'react';
import {
  SafeAreaView,
  View,
  Text,
  TextInput,
  TouchableOpacity,
  StyleSheet
} from 'react-native';

class App extends Component {
  state = { login: 'login', password: 'password', };

  getToken = async (login, password) => {
    const res = await fetch('https://example.com/api/v1/sessions', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Cache-Control': 'no-cache, no-store, must-revalidate',
        'Pragma': 'no-cache',
        'Expires': 0
      },
      body: JSON.stringify({
        user: { login: login, password: password, },
      }),
    });

    let jsonRes = await res.json();

    console.warn(`status = ${res.ok}`);
    console.warn(`I got token = ${jsonRes.data.auth_token}`);

    return await jsonRes;
  };

  getUserToken = async (login, password) => {
    const res = await this.getToken(login, password)
      .then((results) => {
        this.setState({ token: results.data.auth_token })
      });

    return res;
  }

  deleteWithToken = async () => {
    const res = await fetch(`https://example.com/api/v1/sessions/?auth_token=${this.state.token}`,
      {
        method: 'DELETE',
        headers: {
          'Cache-Control': 'no-cache, no-store, must-revalidate',
          'Pragma': 'no-cache',
          'Expires': 0
        },
      }).then((results) => {
        console.warn("I removed token");
      });
  }

  render() {
    return (
      <SafeAreaView>
        <View>
          <TextInput style={styles.input} placeholder={'login'} defaultValue={this.state.login} />
          <TextInput
            style={styles.input}
            placeholder={'password'}
            defaultValue={this.state.password}
            secureTextEntry={true}
          />
          <TouchableOpacity style={styles.button} onPress={() => this.getUserToken(this.state.login, this.state.password)}>
            <Text style={styles.btnText}>Sign in</Text>
          </TouchableOpacity>
          <TouchableOpacity style={styles.button} onPress={() => this.deleteWithToken()}>
            <Text style={styles.btnText}>Sign out</Text>
          </TouchableOpacity>
        </View>
      </SafeAreaView>
    );
  }
}

export default App;

пакет. json

{
  "name": "AwesomeProject2",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "@react-native-community/cli": "^4.8.0",
    "react": "16.11.0",
    "react-native": "0.62.2"
  },
  "devDependencies": {
    "@babel/core": "^7.6.2",
    "@babel/runtime": "^7.6.2",
    "@react-native-community/eslint-config": "^0.0.5",
    "babel-jest": "^24.9.0",
    "eslint": "^6.5.1",
    "jest": "^24.9.0",
    "metro-react-native-babel-preset": "^0.58.0",
    "react-test-renderer": "16.11.0"
  },
  "jest": {
    "preset": "react-native"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...