上篇,讲了下dio建议网络恳求,以及cookie的主动办理,但运转办法是native运转;假如运转在web上,就会出现问题,首先就是跨域问题
下面咱们来解决这个问题
一,布置web产品到nginx
1,咱们将项目中的baseUrl修改为即将布置的服务器ip地址:
baseUrl = "http://81.68.216.56:80/web_dev";
2,履行flutter build web命令后,得到build目录下的web文件夹,将web目录上传到服务器的www目录下(以腾讯云服务器为例)
3,修改服务器上nigix的配置文件,增加下面的代码
server
{
listen 80;
server_name 81.68.216.56;
index index.html index.htm index.php;
root /www/web;
#error_page 404 /404.html;
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
# location ~ /\.
# {
# deny all;
# }
location /web_dev/
{
rewrite ^/b/(.*)$ /$1 break;
proxy_pass https://www.wanandroid.com/;
}
access_log /www/wwwlogs/access.log;
}
阐明:当拜访的地址匹配到web_dev/时,nginx就会代理到www.wanandroid.com/ 这样就经过反向代理,解决了跨域问题;
二, 自定义cookie:布置到nginx后,咱们的cookie都是经过登陆接口,然后主动办理的;但假如咱们的页面供给给他人拜访,而且不希望他人再调登陆接口,该怎样处理呢?
1,首先咱们供给的url大概是这样:
http://81.68.216.56:80/#/homePage?cookie=e546b3c26a214ff 即他人拜访咱们的homePage页面,并带着有效的cookie,这时咱们就需求接纳cookie,并在网络恳求的时候,带着cookie
2,接纳cookie:在App的build办法中
var defaultRoute = window.defaultRouteName;
Uri route = Uri.parse(defaultRoute);
cookie = route.queryParameters["cookie"];
if(cookie != null) {
//将cookie保存进网页的Cookies中
CookieManage.addCookie("token_pass=" + cookie!);
debugPrint(cookie);
}
3,保存cookie:
I – 增加js交互的依赖库
js: ^0.6.3
II – 增加web_plugin.js文件,代码如下
//保存cookie
function _addCookie(cookie){
document.cookie = cookie;
}
III – 在index.html中,倒入web_plugin.js文件
<script src="web_plugin.js" type="application/javascript"></script>
IIII – 增加CookieManage.dart文件,代码如下
import 'dart:async';
import 'package:js/js.dart';
@JS()
external void _addCookie(String cookie);
///web - 保存cookie
class CookieManage {
static Future<String> addCookie(String cookie) async {
_addCookie(cookie);
return cookie;
}
}
V-在App中,调用CookieManage.addCookie办法,保存cookie
//将cookie保存进网页的Cookies中
CookieManage.addCookie("token_pass=" + cookie!);
4,这时候能够经过,下面这样的地址,直接拜访homoPage页面,并拜访需求登陆的接口
http://81.68.216.56/#/homePage?cookie=5d9b90bcb70640183e09d1e755ead823
5,总结:
上面保存cookie的代码,实践最终是调用了document.cookie = cookie;创建了cookie,进程有点绕