如何使用共享首选项从登录数据中获取令牌
how to take token from login data using shared preferences
下面的 Getchallenge 方法具有从 headers “授权” 接收的令牌的硬编码值我需要它从共享首选项登录数据中获取。我已经将共享首选项添加到 LoginData()。如何在 GetChallange() 方法中获得没有硬编码值的令牌。感谢您对此的帮助。
Future _Getchallenge() async {
// final prefs = await SharedPreferences.getInstance();
try {
final response = await Dio()
.get(BASE_API + "challenge/getChallengeByUserAndType/calories",
options: Options(headers: {
'Authorization':
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOnsiaWQiOjIsImFkbWluX25hbWUiOiJqYW1lc2JhbiIsImVtYWlsX2FkZHJlc3MiOiJqYW1lc2JhbkBnbWFpbC5jb20iLCJzdGF0dXMiOiJBRE1JTiJ9LCJpYXQiOjE2NTAzNDk0MTc5MTMsImV4cCI6MTY1MDM1MDYyNzUxM30.dDSTVe6ii7KCuF6x8Lgj3Pl2I2dO9Cp71DAMnkw1NPo', //HEAD
// "Authorization": loginUserData["token"],
}));
// prefs.setString('token', response.data["token"].toString());
Map<String, dynamic> responseJson = await json.decode(response.toString());
ch = responseJson['data'].reversed.toList();
print(ch);
print("length:" + ch.length.toString());
} catch (e) {
print(e);
}
}
Future LoginData() async {
final prefs = await SharedPreferences.getInstance();
setState(() {
isLoading = true;
typing = false;
});
try {
var response = await Dio().post(BASE_API + 'user/login', data: {
"username": username,
"password": password,
"wallet_address": wallet_address,
});
// print(response.data["sub"]["id"]);
// print(response);
if (response.data["status"] == "LoginSuccess") {
setState(() {
prefs.setString('token', response.data["token"].toString());
isLoading = false;
loginUserData["id"] = response.data["sub"]["id"].toString();
loginUserData["username"] = response.data["username"].toString();
loginUserData["wallet_address"] = response.data["wallet_address"].toString();
});
final myString = prefs.getString('token') ?? '';
print(myString);
Get.snackbar(
"success",
"logged in successfully",
backgroundColor: buttontext.withOpacity(0.5),
colorText: textWhite,
borderWidth: 1,
borderColor: Colors.grey,
);
Get.to(BottomNavigation());
} else {
setState(() {
isLoading = false;
typing = true;
});
Get.snackbar(
"error",
"No User Found",
backgroundColor: buttontext.withOpacity(0.5),
colorText: textWhite,
borderWidth: 1,
borderColor: Colors.grey,
);
}
print("res: $response");
setState(() {
isLoading = false;
typing = true;
});
} catch (e) {
setState(() {
isLoading = false;
typing = true;
});
Get.snackbar("Error", "Something went wrong.Please contact admin",
backgroundColor: buttontext.withOpacity(0.5),
borderWidth: 1,
borderColor: Colors.grey,
colorText: Colors.white,
icon: const Icon(
Icons.error_outline_outlined,
color: Colors.red,
size: 30,
));
print(e);
}
}
只需声明一个名为 token 的变量,然后等待共享首选项获取 实例 一旦获取,只需使用 key 您在共享首选项中保存令牌时设置并将该值传递给您的 API
Future _Getchallenge() async {
String? token;
final prefs = await SharedPreferences.getInstance();
token = prefs.getString('token');
try {
final response = await Dio()
.get(BASE_API + "challenge/getChallengeByUserAndType/calories",
options: Options(headers: {
'Authorization':
'Bearer $token', //HEAD
// "Authorization": loginUserData["token"],
}));
// prefs.setString('token', response.data["token"].toString());
Map<String, dynamic> responseJson = await json.decode(response.toString());
ch = responseJson['data'].reversed.toList();
print(ch);
print("length:" + ch.length.toString());
} catch (e) {
print(e);
}
}
您可以简单地通过 getString
方法从 SharedPreferences
获取令牌,就像您通过 setString
方法将其保存在登录中一样。
Future _Getchallenge() async {
final prefs = await SharedPreferences.getInstance();
try {
final response = await Dio()
.get(BASE_API + "challenge/getChallengeByUserAndType/calories",
options: Options(headers: {
'Authorization':
'Bearer ${prefs.getString('token')}'
}));
Map<String, dynamic> responseJson = await json.decode(response.toString());
ch = responseJson['data'].reversed.toList();
print(ch);
print("length:" + ch.length.toString());
} catch (e) {
print(e);
}
}
下面的 Getchallenge 方法具有从 headers “授权” 接收的令牌的硬编码值我需要它从共享首选项登录数据中获取。我已经将共享首选项添加到 LoginData()。如何在 GetChallange() 方法中获得没有硬编码值的令牌。感谢您对此的帮助。
Future _Getchallenge() async {
// final prefs = await SharedPreferences.getInstance();
try {
final response = await Dio()
.get(BASE_API + "challenge/getChallengeByUserAndType/calories",
options: Options(headers: {
'Authorization':
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOnsiaWQiOjIsImFkbWluX25hbWUiOiJqYW1lc2JhbiIsImVtYWlsX2FkZHJlc3MiOiJqYW1lc2JhbkBnbWFpbC5jb20iLCJzdGF0dXMiOiJBRE1JTiJ9LCJpYXQiOjE2NTAzNDk0MTc5MTMsImV4cCI6MTY1MDM1MDYyNzUxM30.dDSTVe6ii7KCuF6x8Lgj3Pl2I2dO9Cp71DAMnkw1NPo', //HEAD
// "Authorization": loginUserData["token"],
}));
// prefs.setString('token', response.data["token"].toString());
Map<String, dynamic> responseJson = await json.decode(response.toString());
ch = responseJson['data'].reversed.toList();
print(ch);
print("length:" + ch.length.toString());
} catch (e) {
print(e);
}
}
Future LoginData() async {
final prefs = await SharedPreferences.getInstance();
setState(() {
isLoading = true;
typing = false;
});
try {
var response = await Dio().post(BASE_API + 'user/login', data: {
"username": username,
"password": password,
"wallet_address": wallet_address,
});
// print(response.data["sub"]["id"]);
// print(response);
if (response.data["status"] == "LoginSuccess") {
setState(() {
prefs.setString('token', response.data["token"].toString());
isLoading = false;
loginUserData["id"] = response.data["sub"]["id"].toString();
loginUserData["username"] = response.data["username"].toString();
loginUserData["wallet_address"] = response.data["wallet_address"].toString();
});
final myString = prefs.getString('token') ?? '';
print(myString);
Get.snackbar(
"success",
"logged in successfully",
backgroundColor: buttontext.withOpacity(0.5),
colorText: textWhite,
borderWidth: 1,
borderColor: Colors.grey,
);
Get.to(BottomNavigation());
} else {
setState(() {
isLoading = false;
typing = true;
});
Get.snackbar(
"error",
"No User Found",
backgroundColor: buttontext.withOpacity(0.5),
colorText: textWhite,
borderWidth: 1,
borderColor: Colors.grey,
);
}
print("res: $response");
setState(() {
isLoading = false;
typing = true;
});
} catch (e) {
setState(() {
isLoading = false;
typing = true;
});
Get.snackbar("Error", "Something went wrong.Please contact admin",
backgroundColor: buttontext.withOpacity(0.5),
borderWidth: 1,
borderColor: Colors.grey,
colorText: Colors.white,
icon: const Icon(
Icons.error_outline_outlined,
color: Colors.red,
size: 30,
));
print(e);
}
}
只需声明一个名为 token 的变量,然后等待共享首选项获取 实例 一旦获取,只需使用 key 您在共享首选项中保存令牌时设置并将该值传递给您的 API
Future _Getchallenge() async {
String? token;
final prefs = await SharedPreferences.getInstance();
token = prefs.getString('token');
try {
final response = await Dio()
.get(BASE_API + "challenge/getChallengeByUserAndType/calories",
options: Options(headers: {
'Authorization':
'Bearer $token', //HEAD
// "Authorization": loginUserData["token"],
}));
// prefs.setString('token', response.data["token"].toString());
Map<String, dynamic> responseJson = await json.decode(response.toString());
ch = responseJson['data'].reversed.toList();
print(ch);
print("length:" + ch.length.toString());
} catch (e) {
print(e);
}
}
您可以简单地通过 getString
方法从 SharedPreferences
获取令牌,就像您通过 setString
方法将其保存在登录中一样。
Future _Getchallenge() async {
final prefs = await SharedPreferences.getInstance();
try {
final response = await Dio()
.get(BASE_API + "challenge/getChallengeByUserAndType/calories",
options: Options(headers: {
'Authorization':
'Bearer ${prefs.getString('token')}'
}));
Map<String, dynamic> responseJson = await json.decode(response.toString());
ch = responseJson['data'].reversed.toList();
print(ch);
print("length:" + ch.length.toString());
} catch (e) {
print(e);
}
}