使用 SharedPreferences 中的令牌持有者编辑配置文件数据
Posted
技术标签:
【中文标题】使用 SharedPreferences 中的令牌持有者编辑配置文件数据【英文标题】:edit profile data flutter with token bearer from SharedPreferences 【发布时间】:2021-02-06 03:59:06 【问题描述】:我使用 Postman 令牌持有者创建了一个登录功能,即使应用程序已关闭,用户也可以保持登录状态。 现在我想编辑已登录应用程序的电子邮件和个人资料密码,然后使用已保存的 sharpref 中的相同令牌持有者保存它。
如何实现它。下面是我获取数据的代码,但是这段代码仍然有错误。
getPerfs() async
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
var apikey = prefs.getString('apikey');
print(apikey);
var url = 'http://api.batulimee.com/v1_ship/my_profile';
Future<Map> getData() async
var fullUrl = url + await getPerfs();
var response = await http.post(fullUrl);
return json.decode(response.body) as Map<String, dynamic>;
这是来自 API url my_profile 的 json 结构。
"status": "success",
"data":
"id_user": 49,
"id_role": "8",
"name_role": "Ship Owner",
"first_name": "a",
"last_name": "f",
"email": "afriansyahm86@gmail.com",
"phone": "082258785595",
"saldo": "0",
"company_name": "aa",
"company_address": "jl kav pgri",
"photo": "https://batulimee.com/foto_user/avatar.png"
,
"message": "get profile detail successfully "
如果你想得到它,你必须使用 Postman 授权令牌持有者。
如何获取所有这些数据并进行编辑?
【问题讨论】:
【参考方案1】:第一件事是在您的 getPerfs() 方法中,我可以看到您正在保存 apikey 但在您的情况下 getData() 的其他方法无法访问。
我会以不同的方式做这件事,
Future<Map<String,dynamic>> getData() async
try
var url = 'http://api.batulimee.com/v1_ship/my_profile';
SharedPreferences prefs = await SharedPreferences.getInstance();
var apikey = prefs.getString('apikey');
var response = await http.post(
url,
headers:
"Accept": "application/json",
"Content-Type": "application/json",
"Bearer Token" : apikey
,
);
var checkResponse = json.decode(response.body) as Map<String, dynamic>;
print('checkResponse');
return checkResponse;
catch (e)
print(e);
throw(e);
只需复制并粘贴此代码即可获取数据,但我建议您将获取的数据保存在变量中,而不是返回数据。
还有一点,这可能是一个获取 API 而不是发布 API,因为您在请求负载中没有提供任何内容。
【讨论】:
但我提供了一个可变的令牌持有者 @Aphron 您正在创建 getPerfs() 方法可以访问的 apikey 变量,只有您不能在 getData() 方法中使用该变量。如果你想使用 apikey,那么在 Class 下声明它而不是在方法中。 对不起 Shrey Jain,我正在更新我的帖子。请看一下。要从 my_profile 获取 json 数据,需要一个令牌承载,必须在 Authorization 参数中指定,如图所示。 那个token bearer和我登录时生成的token是一样的。然后我把它保存在sharedperf上,这样用户就保持登录状态。那么token bearer也可以用来获取json来自 my_profile 的数据 嗨@Aphron 抱歉回复晚了,var fullUrl = url + await getPerfs(); ,这是错误的实现,异步/等待的事情需要时间,所以在你的 fullUrl 变量中,你的 URL 可能没有附加 apikey,第二件事在你的 getPerfs() 中你没有返回任何东西,所以 var fullUrl = url;永远都是这样。以上是关于使用 SharedPreferences 中的令牌持有者编辑配置文件数据的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Kotlin 在 Android sharedPreferences 中保存数据
SharedPreferences 在 null 颤动上调用
SharedPreferences 中的 commit() 和 apply() 有啥区别