Commit ae37e045 authored by Junling Bu's avatar Junling Bu
Browse files

文档中的登陆同一调整成登录。

parent ca188343
...@@ -88,7 +88,7 @@ litemall ...@@ -88,7 +88,7 @@ litemall
1. 微信开发工具导入litemall-wx项目; 1. 微信开发工具导入litemall-wx项目;
2. 项目配置,启用“不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书” 2. 项目配置,启用“不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书”
3. 点击“编译”,即可在微信开发工具预览效果; 3. 点击“编译”,即可在微信开发工具预览效果;
4. 也可以点击“预览”,然后手机扫描登 4. 也可以点击“预览”,然后手机扫描登
![](doc/pic/5.gif) ![](doc/pic/5.gif)
...@@ -107,7 +107,38 @@ litemall ...@@ -107,7 +107,38 @@ litemall
5. [商场子系统](doc/5.md) 5. [商场子系统](doc/5.md)
6. [下一步计划](doc/6.md) 6. [下一步计划](doc/6.md)
更新 开发计划
====
目前项目开发中,存在诸多不足,以下是目前规划的开发计划。
V 1.0.0 完成以下目标:
1. 除了部分功能(如支付和优惠券等),小商城的优化和改进基本结束;
2. 管理后台基本实现所有表的CRUD操作;
3. 后台服务能够对参数进行检验。
V 2.0.0 完成以下目标:
1. 小商城能够完成基本的业务功能;
2. 管理后台实现较好的业务操作和交互效果,而不是简单的CRUD;
3. 管理后台实现统计功能、日志功能
V 3.0.0 完成以下目标:
1. 管理后台一些辅助功能
2. 后台服务加强安全功能、事务功能
3. 项目代码重构和清理
4. 其他配套服务,如代码文档、war部署支持
项目结束,已经是一个真正可工作的项目,此时进入维护阶段。
如果真的坚持到维护阶段,那么存在三种可能性:
1. 或者开发 V 4.0.0,实现web商场子系统;
2. 或者重新开发一个新的独立项目,引入企业级功能,如缓存、权限、对象存储云服务等;
3. 或者结束,不再开发,仅仅维护。
警告:
> ** 以上仅仅是个人规划的开发计划,实际可能出现任何情况,例如能力有限而放弃开发。**
开发进度更新
== ==
* V 0.1.0,项目架构基本完成。 * V 0.1.0,项目架构基本完成。
...@@ -151,4 +182,6 @@ litemall ...@@ -151,4 +182,6 @@ litemall
* Issue里面对业务或技术的讨论 * Issue里面对业务或技术的讨论
* Pull Request * Pull Request
* 对文档的意见或补充 * 对文档的意见或补充
* 其他任何有意义本项目的行为 * 其他任何有意义本项目的行为
\ No newline at end of file
个人能力有限,欢迎一起开发。
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
2. 使用FileZilla把deploy整个文件夹上传到云主机的/home/ubuntu文件夹中 2. 使用FileZilla把deploy整个文件夹上传到云主机的/home/ubuntu文件夹中
3. 使用PuTTY登云主机 3. 使用PuTTY登云主机
4. 运行脚本部署运行 4. 运行脚本部署运行
......
...@@ -205,8 +205,8 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实 ...@@ -205,8 +205,8 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
cnpm run dev cnpm run dev
``` ```
然后,打开浏览器,输入`http://localhost:9527` 然后,打开浏览器,输入`http://localhost:9527`
如果出现管理后台登页面,则表明管理后台的前端运行正常; 如果出现管理后台登页面,则表明管理后台的前端运行正常;
6. 请确定litemall-admin-api模块已经运行,然后点击`登`,如果能够成功登,则表明管理后台的前端和后端对接成功,运行正常。 6. 请确定litemall-admin-api模块已经运行,然后点击`登`,如果能够成功登,则表明管理后台的前端和后端对接成功,运行正常。
## 1.5 部署方案 ## 1.5 部署方案
...@@ -300,11 +300,11 @@ http://localhost:8083/admin/index/index ...@@ -300,11 +300,11 @@ http://localhost:8083/admin/index/index
4. 设置SSH密钥(可选) 4. 设置SSH密钥(可选)
建议用户设置SSH密钥,可以免密码登云主机,以及用于脚本自动上传应用。 建议用户设置SSH密钥,可以免密码登云主机,以及用于脚本自动上传应用。
5. 使用PuTTY远程登云主机 5. 使用PuTTY远程登云主机
如果用户设置SSH密钥,可以采用免密码登;否则采用账号和密码登 如果用户设置SSH密钥,可以采用免密码登;否则采用账号和密码登
#### 1.5.3.2 JDK8 #### 1.5.3.2 JDK8
...@@ -350,7 +350,7 @@ sudo apt-get install mysql-client ...@@ -350,7 +350,7 @@ sudo apt-get install mysql-client
FLUSH PRIVILEGES; FLUSH PRIVILEGES;
quit; quit;
``` ```
3.腾讯云,设置云主机的`安全组`,允许`3306`端口访问,然后重启云主机,使得这些配置生效。 3.腾讯云,设置云主机的`安全组`,允许`3306`端口访问,然后重启云主机,使得这些配置生效。
警告 警告
> 1. 因为安全的原因,MySQL不应该设置远程访问, > 1. 因为安全的原因,MySQL不应该设置远程访问,
...@@ -365,7 +365,7 @@ sudo apt-get install mysql-client ...@@ -365,7 +365,7 @@ sudo apt-get install mysql-client
* 命令行导入 * 命令行导入
1. 采用FileZilla把本项目的litemall.sql上传到云主机 1. 采用FileZilla把本项目的litemall.sql上传到云主机
2. 使用PuTTY登云主机 2. 使用PuTTY登云主机
3. 进入MySQL,输入上节所设置的MySQL的root密码 3. 进入MySQL,输入上节所设置的MySQL的root密码
4. 创建数据库、 创建用户并分配访问权限 4. 创建数据库、 创建用户并分配访问权限
5. 导入数据 5. 导入数据
...@@ -456,7 +456,7 @@ https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#dep ...@@ -456,7 +456,7 @@ https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#dep
2. 使用FileZilla把deploy整个文件夹上传到云主机的/home/ubuntu文件夹中 2. 使用FileZilla把deploy整个文件夹上传到云主机的/home/ubuntu文件夹中
3. 使用PuTTY登云主机 3. 使用PuTTY登云主机
4. 运行脚本部署运行 4. 运行脚本部署运行
......
...@@ -95,7 +95,7 @@ litemall数据库基于nideshop中的[nideshop.sql](https://github.com/tumobi/ni ...@@ -95,7 +95,7 @@ litemall数据库基于nideshop中的[nideshop.sql](https://github.com/tumobi/ni
### 2.1.2 用户和微信用户设计 ### 2.1.2 用户和微信用户设计
目前准备支持用户普通账号登和微信登两种方式,两种登方式仅仅采用一个litemall-user表可能不是很合适。此外,如果进一步支持其他多种第三方登,那么这里需要重新设计。 目前准备支持用户普通账号登和微信登两种方式,两种登方式仅仅采用一个litemall-user表可能不是很合适。此外,如果进一步支持其他多种第三方登,那么这里需要重新设计。
### 2.1.3 行政区域设计 ### 2.1.3 行政区域设计
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
* 进一步区分商品和货品的关系 * 进一步区分商品和货品的关系
* 地址优化,目前每一次点击都会请求后台,应该缓存已有的数据 * 地址优化,目前每一次点击都会请求后台,应该缓存已有的数据
* 商品数量和规格中,如果货品数量不足,则显示不能点击的效果 * 商品数量和规格中,如果货品数量不足,则显示不能点击的效果
*逻辑重新设计,如果用户没有登,则相关页面显示登的效果 *逻辑重新设计,如果用户没有登,则相关页面显示登的效果
## 3.1 litemall-wx-api ## 3.1 litemall-wx-api
...@@ -71,25 +71,25 @@ var WxApiRoot = 'http://localhost:8082/wx/'; ...@@ -71,25 +71,25 @@ var WxApiRoot = 'http://localhost:8082/wx/';
因此,开发阶段用户可以按照具体情况切换1,2或3的选项。 因此,开发阶段用户可以按照具体情况切换1,2或3的选项。
### 3.2.2 登 ### 3.2.2 登
按照官方文档,开发者采用`wx.login`方法即可实现登操作; 按照官方文档,开发者采用`wx.login`方法即可实现登操作;
然而,由于`wx.login`只能返回临时登凭证`code`,从服务器也只能返回对应的sessionId, 然而,由于`wx.login`只能返回临时登凭证`code`,从服务器也只能返回对应的sessionId,
因此虽然已经可以视作登,但是在小程序中不能显示有意义的登状态, 因此虽然已经可以视作登,但是在小程序中不能显示有意义的登状态,
因此实际很多小程序是继续采用`wx.getUserInfo`来进一步请求用户信息。 因此实际很多小程序是继续采用`wx.getUserInfo`来进一步请求用户信息。
因此本模块中,用户的登状态也是由`wx.login``wx.getUserInfo`组成。 因此本模块中,用户的登状态也是由`wx.login``wx.getUserInfo`组成。
#### 3.2.2.1 登检测 #### 3.2.2.1 登检测
用户可以采用`user.checkLogin`来检查是否`已登`,而其检测逻辑是: 用户可以采用`user.checkLogin`来检查是否`已登`,而其检测逻辑是:
1. 可以从storage获取`userInfo``token` 1. 可以从storage获取`userInfo``token`
2. 同时`wx.checkSession`也成功。 2. 同时`wx.checkSession`也成功。
#### 3.2.2.2 登时机 #### 3.2.2.2 登时机
请求用户信息的时机存在两种设计: 请求用户信息的时机存在两种设计:
1. 一种是小程序加载时,即申请用户信息,这种实现较简单; 1. 一种是小程序加载时,即申请用户信息,这种实现较简单;
2. 另外一种是小程序加载时不需要,但是小程序用户需要真正用户信息时才申请用户信息, 2. 另外一种是小程序加载时不需要,但是小程序用户需要真正用户信息时才申请用户信息,
...@@ -97,30 +97,30 @@ var WxApiRoot = 'http://localhost:8082/wx/'; ...@@ -97,30 +97,30 @@ var WxApiRoot = 'http://localhost:8082/wx/';
目前采用第二张实现,可以分成两种情况: 目前采用第二张实现,可以分成两种情况:
* 用户主动登 * 用户主动登
用户主动登,指的是`我的`页面中用户没有登显示`点击登`的效果。 用户主动登,指的是`我的`页面中用户没有登显示`点击登`的效果。
* 用户被动登 * 用户被动登
用户被动登,指的是用户想购买商品或者需要用户登才能操作的行为, 用户被动登,指的是用户想购买商品或者需要用户登才能操作的行为,
此时因为向服务器请求时token没有设置,因此服务器拒绝用户的请求,同时返回`401`业务代码。 此时因为向服务器请求时token没有设置,因此服务器拒绝用户的请求,同时返回`401`业务代码。
目前需要检测用户登的页面有: 目前需要检测用户登的页面有:
* 购物车 * 购物车
* 我的主页 * 我的主页
讨论: 讨论:
> 对于第二张情况,原nideshop-mini-program项目是采取一种自动登的方式。 > 对于第二张情况,原nideshop-mini-program项目是采取一种自动登的方式。
> 这里则采用跳转登录页面的方式。 > 这里则采用跳转登录页面的方式。
#### 3.2.2.3 登操作 #### 3.2.2.3 登操作
如前面讨论,这里的登操作实际包含两个操作`wx.login``wx.getUserInfo` 如前面讨论,这里的登操作实际包含两个操作`wx.login``wx.getUserInfo`
用户可以采用`user.loginByWeixin`来进行登操作。 用户可以采用`user.loginByWeixin`来进行登操作。
按照官网文档,用户登前应该检测以下,来避免频繁无意义的登操作, 按照官网文档,用户登前应该检测以下,来避免频繁无意义的登操作,
因此较合适的做法如下所示: 因此较合适的做法如下所示:
``` ```
...@@ -131,18 +131,18 @@ var WxApiRoot = 'http://localhost:8082/wx/'; ...@@ -131,18 +131,18 @@ var WxApiRoot = 'http://localhost:8082/wx/';
userInfo: res.data.userInfo, userInfo: res.data.userInfo,
}); });
}).catch((err) => { }).catch((err) => {
util.showErrorToast('登失败'); util.showErrorToast('登失败');
}); });
}); });
``` ```
#### 3.2.2.4 登拒绝授权 #### 3.2.2.4 登拒绝授权
还存在一个问题,当用户登时,会出现"微信授权"的对话框。 还存在一个问题,当用户登时,会出现"微信授权"的对话框。
如果用户选择”拒绝“,那么之后用户的登操作总是失败的。 如果用户选择”拒绝“,那么之后用户的登操作总是失败的。
目前的做法是,用户拒绝授权后,如果用户登失败,则返回信息框, 目前的做法是,用户拒绝授权后,如果用户登失败,则返回信息框,
提醒用户“请退出,左滑删除小程序,然后重新进入进行授权”。 提醒用户“请退出,左滑删除小程序,然后重新进入进行授权”。
### 3.2.3 立即购买和放入购物车 ### 3.2.3 立即购买和放入购物车
......
...@@ -36,9 +36,9 @@ public class Application { ...@@ -36,9 +36,9 @@ public class Application {
目前没有事务管理,因此如果直接把项目用于正式运行中,可能会存在数据不一致等问题。 目前没有事务管理,因此如果直接把项目用于正式运行中,可能会存在数据不一致等问题。
### 6.1.6 小程序登设计 ### 6.1.6 小程序登设计
个人觉得目前nideshop-mini-program里的登设计内部实现不是很合理。 个人觉得目前nideshop-mini-program里的登设计内部实现不是很合理。
### 6.1.n 代码重构 ### 6.1.n 代码重构
......
...@@ -42,7 +42,7 @@ public class ResponseUtil { ...@@ -42,7 +42,7 @@ public class ResponseUtil {
} }
public static final Object fail401() { public static final Object fail401() {
return fail(401, "请登"); return fail(401, "请登");
} }
public static final Object unlogin(){ public static final Object unlogin(){
......
...@@ -41,7 +41,7 @@ public class WxCartController { ...@@ -41,7 +41,7 @@ public class WxCartController {
@RequestMapping("index") @RequestMapping("index")
public Object index(@LoginUser Integer userId) { public Object index(@LoginUser Integer userId) {
if(userId == null){ if(userId == null){
return ResponseUtil.fail(401, "请登"); return ResponseUtil.fail(401, "请登");
} }
List<LitemallCart> cartList = cartService.queryByUid(userId); List<LitemallCart> cartList = cartService.queryByUid(userId);
...@@ -312,7 +312,7 @@ public class WxCartController { ...@@ -312,7 +312,7 @@ public class WxCartController {
/* /*
* 获取购物车商品的总件件数 * 获取购物车商品的总件件数
* 用户也是可选登,如果没有登,则返回空数据 * 用户也是可选登,如果没有登,则返回空数据
*/ */
@RequestMapping("goodscount") @RequestMapping("goodscount")
public Object goodscount(@LoginUser Integer userId) { public Object goodscount(@LoginUser Integer userId) {
......
...@@ -55,7 +55,7 @@ public class WxGoodsController { ...@@ -55,7 +55,7 @@ public class WxGoodsController {
/** /**
* 商品详情页数据 * 商品详情页数据
* 用户也是可选登,如果登了,则查询是否收藏,以及记录用户的足迹 * 用户也是可选登,如果登了,则查询是否收藏,以及记录用户的足迹
*/ */
@RequestMapping("detail") @RequestMapping("detail")
public Object detail(@LoginUser Integer userId, Integer id) { public Object detail(@LoginUser Integer userId, Integer id) {
...@@ -160,7 +160,7 @@ public class WxGoodsController { ...@@ -160,7 +160,7 @@ public class WxGoodsController {
/** /**
*   获取商品列表 *   获取商品列表
* 1. 这里的前五个参数都是可选的,甚至都是空 * 1. 这里的前五个参数都是可选的,甚至都是空
* 2. 用户也是可选登,如果登了,则记录用户的搜索关键字 * 2. 用户也是可选登,如果登了,则记录用户的搜索关键字
* *
*/ */
@RequestMapping("list") @RequestMapping("list")
......
...@@ -24,7 +24,7 @@ public class WxSearchController { ...@@ -24,7 +24,7 @@ public class WxSearchController {
/** /**
*   index *   index
* 用户登是可选的,如果用户登,则记录用户的搜索数据 * 用户登是可选的,如果用户登,则记录用户的搜索数据
*/ */
@RequestMapping("index") @RequestMapping("index")
public Object index(@LoginUser Integer userId) { public Object index(@LoginUser Integer userId) {
......
...@@ -194,7 +194,7 @@ ...@@ -194,7 +194,7 @@
}, },
{ {
"id": -1, "id": -1,
"name": "登", "name": "登",
"pathName": "pages/auth/login/login", "pathName": "pages/auth/login/login",
"query": "" "query": ""
}, },
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment