У меня есть URL-адрес для генерации токена, с помощью http-сообщения я получаю токен. Теперь моя проблема заключалась в том, что я должен использовать сгенерированный токен в качестве заголовка в регистре API (другой API).
Future<Map<String, dynamic>> fetchPost() async {
print('feg');
final response = await http.post(
'/rest_api/gettoken&grant_type=client_credentials',
headers: {HttpHeaders.authorizationHeader: "Basic token"},
);
final responseJson = json.decode(response.body);
print("Result: ${response.body}");
//return Post.fromJson(responseJson);
return responseJson;
}
здесь я получаю токен, который я хочу использовать для регистрации API
Future<Register> fetchPost() async {
print('feg');
final response = await http.post(
'your base url/rest/register/register',
headers: { HttpHeaders.authorizationHeader: "Bearer token",
HttpHeaders.contentTypeHeader: "application/json"},
);
var responseJson = json.decode(response.body);
print("Result: ${response.body}");
return Register.fromJson(responseJson);
}
это метод публикации для регистрации API, я хочу использовать ранее сгенерированный токен носителя в вышеуказанных заголовках API.
Имейте в виду, что токен в настоящее время открыт. Использование flutter_secure_storage с SharedPreferences, предложенное Матиасом, является более разумным подходом.





вы можете сохранить сгенерированный токен в общих настройках. Затем вы можете использовать его в любом запросе позже.
сначала добавьте в pubspec.yaml
dependencies:
shared_preferences: ^0.5.3+4
затем импортируйте его в свой код:
import 'package:shared_preferences/shared_preferences.dart';
поэтому, когда вы получите свой токен
Future<Map<String, dynamic>> fetchPost() async {
print('feg');
final response = await http.post(
'/rest_api/gettoken&grant_type=client_credentials',
headers: {HttpHeaders.authorizationHeader: "Basic token"},
);
final responseJson = json.decode(response.body);
print("Result: ${response.body}");
//return Post.fromJson(responseJson);
SharedPreferences prefs = await SharedPreferences.getInstance();
//now set the token inside the shared_preferences
//I assumed that the token is a field in the json response, but check it before!!
await prefs.setString('token',responseJson['token']);
return responseJson;
}
и когда вам нужно отправить запрос, просто получите токен из shared_preferences:
Future<Register> fetchPost() async {
print('feg');
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString('token');
final response = await http.post(
'your base url/rest/register/register',
headers: { HttpHeaders.authorizationHeader: token,
HttpHeaders.contentTypeHeader: "application/json"},
);
var responseJson = json.decode(response.body);
print("Result: ${response.body}");
return Register.fromJson(responseJson);
}
Большое спасибо..@Сами Канафани
Другой вариант — использовать безопасное хранилище с цепочкой ключей (Android) и хранилищем ключей (iOS). https://pub.dev/packages/flutter_secure_storage
Добавьте в свой pubspec.yaml
dependencies:
flutter_secure_storage: ^3.2.1+1
И в своем коде импортируйте библиотеку и сохраните
Future<Map<String, dynamic>> fetchPost() async {
final storage = FlutterSecureStorage();
print('feg');
final response = await http.post(
'/rest_api/gettoken&grant_type=client_credentials',
headers: {HttpHeaders.authorizationHeader: "Basic token"},
);
final responseJson = json.decode(response.body);
print("Result: ${response.body}");
//return Post.fromJson(responseJson);
/// Write token in token key with security
await prefs.write(key: 'token',value: responseJson['token']);
return responseJson;
}
Если вам нужно прочитать, используйте этот код:
Future<Register> fetchPost() async {
final storage = FlutterSecureStorage();
print('feg');
String token = await storage.read(key: 'token');
final response = await http.post(
'your base url/rest/register/register',
headers: { HttpHeaders.authorizationHeader: token,
HttpHeaders.contentTypeHeader: "application/json"},
);
var responseJson = json.decode(response.body);
print("Result: ${response.body}");
return Register.fromJson(responseJson);
}
Когда вы получите токен, сохраните его в
SharedPreferences(локальное хранилище ключей и значений). Вы можете получить токен оттуда всякий раз, когда вам нужно вызвать API