web-dev-qa-db-ja.com

ベアラトークンHTTP Flutterを要求します

私のAPIのトークンを送信する必要があります。私は私のトークンをSharedPreferencesに保存し、これを修復することができます。私のAPIは、ベアラと一緒にいますが、どうやって?

認証、httpなどでテストしました.

SP.で保存する方法

Future<bool> setToken(String value) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.setString('token', value);
  }

  Future<String> getToken() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getString('token');
  }

  Future<Candidate> candidateAuth({Map map}) async {
    String url = 'http://10.0.2.2:3000/v1/api/auth/candidate';
    await http
        .post(url,
            headers: {
              'Content-type': 'application/json',
              'Accept': 'application/json'
            },
            body: jsonEncode(map))
        .then((response) {
      if (response.statusCode == 201) {
        token = Candidate.fromJson(json.decode(response.body)).token;
        Candidate().setToken(token);
        return Candidate.fromJson(json.decode(response.body));
      } else {
        throw Exception('Failed auth');
      }
    });
  }
}
 _

私のAPIコール:


Future<List<Theme>> getThemes() async {
    String url = 'http://10.0.2.2:3000/v1/api/theme';
    String token;
    Candidate().getToken().then((value) {
      token = value;
    });
    final response = await http.get(url, headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      'Authorization': 'Bearer $token',
    });
    print('Token : ${token}');
    print(response);

    if (response.statusCode == 200) {
      List themesList = jsonDecode(response.body);
      List<Theme> themes = [];
      for (var themeMap in themesList) {
        themes.add(Theme.fromJson(themeMap));
      }
      return themes;
    } else {
      throw Exception('Failed to load themes');
    }
  }

 _

私のAPI戻りエラー401:不正な

11
MayuriXx

これは投稿要求のためのサンプルです。ヘッダーの「承認」を追加する必要があります。 'bearer $ token'

final response = await http.post(
  url,
  headers: {'Authorization': 'Bearer $token'},
);
 _
0
Imran Sefat

承認フィールドを要求ヘッダーに追加する必要があります。

getProfile() async {
print(getToken());
var token = await getToken();
http.post(
      "$url",
      headers: {
        "Content-Type": "application/json",
        'Authorization': 'Bearer $token',
      },
      encoding: Encoding.getByName("utf-8"),
    ).then((response) {
      print(datafromurl);
      if (response.statusCode == 200) {
         print(json.decode(response.body));
      }
    });
}
 _
0
Ali Abbas