移动Web前端,游客点击商品的收藏按钮,登录完成,回来之后,如何自动收藏
我们都知道,移动Web端(M站环境下),很多时候,前端是无法判断用户的登录状态的,因为出于安全性考虑,与账号相关的cookie字段一般都是 http-only的。
如果前端想判断用户的登录状态,需要主动去调后台接口,根据后台接口返回的状态码来判断。
那么,我如果想实现下面这样一个场景,该怎么做呢?
移动Web端(M站环境下),游客点击商品的收藏按钮,登录完成,回来之后,如何自动收藏?
方式一:在url里加字段
具体步骤如下:
(1)游客点击收藏按钮,立即调用favCommAdd的接口(假设这个是收藏商品的接口)。如果接口返回未登录,就往重定向的url中加字段doFavor=true
,然后去执行登录操作。比如:
var rurl = location.href + '&isLogin=true'
favCommAdd(skuId, rurl); //调用接口。参数一表示,给指定的sku添加收藏。参数二用于登录成功后的回跳
上面的这个rurl
参数指的是用户登录成功后的回跳链接。
(2)页面初始化的时候,做判断:如果当前页面的url中包含了doFavor=true
字段(代表用户在上面的第一步中登录成功),就调用FavCommAdd的接口。收藏成功。
var doFavor = url.getUrlParam('doFavor'); //这一行是伪代码,用于获取url中的指定参数
if(doFavor&&doFavor == 'true'){
console.log('登录成功了');
queryAskPermission();
}
总结:方式一的这种做法存在csrf安全问题,如果我把当前页面携带doFavor字段的url链接转发给别人(例如 smyhvae.com/item.shtml?sku=1234&doFavor=true
),别人点进去之后,也会去调用FavCommAdd接口。
方式二:往cookie里加字段
具体步骤如下:
方式二和方式一是类似的。只不过,这次,我们是在 cookie 里加字段,而不是在 url 里加字段。
具体步骤如下:
(1)游客点击收藏按钮,立即调用FavCommAdd的接口。如果接口返回未登录,就往 cookie 里加doFavor
字段,然后去执行登录操作。比如:
cookie.set('dofav','ok',1); //这一行是伪代码,表示往cookie里加自定义的字段
(2)页面初始化的时候,做判断:如果当前页面的cookie中包含了doFavor
字段(代表用户在上面的第一步中登录成功),就调用FavCommAdd的接口,同时删除这个cookie字段。收藏成功。比如:
if (cookie.get('dofav')){ //这一行是伪代码,表示获取指定的cookie字段
cookie.del('dofav');
obj.fav();
}
总结:
方式二比方式一更安全,如果把链接转发给他人,他人那里并未检测出cookie里的指定字段,自然也就无法调用FavCommAdd 接口。
但是,方式二依然避免不了csrf攻击(比如说,当黑客往cookie里写入字段的时候)。但总的来说,方式二还算比较通用。
当然,我们还可以在方式二的基础之上,往cookie中的字段中加md5码,并且要保证这个md5的时效性,那就更安全了。
如果还有其他更安全、更严谨的方式,欢迎交流。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2014-07-20 Android组件系列----Activity的生命周期
2014-07-20 Android组件系列----当前Activity跳转到另一个Activity的详细过程