Flutter Dio网络请求cookie管理,实现自动登录
2020-09-05 本文已影响0人
技术混子
倒入依赖:
cookie_jar: 1.0.1
dio_cookie_manager: 1.0.0
由于在flutter中只简单对cookie做save处理会在app退出时清除cookie信息,导致第二次获取cookie为空,无法实现自动登录,所以这里要对cookie做点处理
class Cook {
//改为使用 PersistCookieJar,在文档中有介绍,PersistCookieJar将 cookie保留在文件中,因此,如果应用程序退出,则cookie始终存在,除 非显式调用delete
static PersistCookieJar _cookieJar;
static Future<PersistCookieJar> get cookieJar async {
// print(_cookieJar);
if (_cookieJar == null) {
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
print('获取的文件系统目录: ' + appDocPath);
_cookieJar = new PersistCookieJar(dir: appDocPath);
}
return _cookieJar;
}
}
在需要需要使用的dart文件中引入class Cook{...}
使用方法:
第一次登录时在请求成功回调中保存cookie登录信息 Uri.parse('url'),url得是登录接口url
//获取cookies
List<Cookie> cookies = (await Cook.cookieJar).loadForRequest(
Uri.parse('http://xxx.xxx.xx.xx:xxxx/xx/login'));
//Save cookies
(await Cook.cookieJar)
.saveFromResponse(Uri.parse('http://xxx.xxx.xx.xx:xxxx/xx/login'), cookies);
print('登录cookie====>,$cookiess');
之后在首页请求中加入如下代码
dios.interceptors.add(CookieManager((await Cook.cookieJar)));
也是第一次接触cookie,具体细节慢慢研究!!!