当前位置: 首页 > news >正文

asp.net 怎么做网站营销页面

asp.net 怎么做网站,营销页面,上国外网站的dns,专门做本子的网站客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…

客户管理模块

  • 1.认证模块
    • 1.1 认证方式介绍
      • 1.1.1 小程序认证
      • 1.1.2 手机验证码登录
      • 1.1.3 账号密码认证
    • 1.2 小程序认证
      • 1.2.1 小程序申请
      • 1.2.2 创建客户后端工程jzo2o-customer
      • 1.2.3 开发部署前端
      • 1.2.4 小程序认证流程
        • 1.2.4.1 customer小程序认证接口设计
          • Controller层
          • Service层
          • 调用Publics模块获取openid
          • 查询数据库构建token
          • 保存token到微服务的ThreadLocal中
      • 1.2.5 手机验证码认证
        • 1.2.5.1 开发与部署app前端
        • 1.2.5.2 customer短信认证接口设计

1.认证模块

一般情况有用户交互的项目都有认证授权功能,首先要搞清楚两个概念:认证和授权。
认证: 就是校验用户的身份是否合法,常见的认证方式有账号密码登录、手机验证码登录等。
授权:则是该用户登录系统成功后当用户去点击菜单或操作数据时系统判断该用户是否有权限,有权限则允许继续操作,没有权限则拒绝访问。

本项目包括四个端:用户端(小程序)、服务端(app)、机构端(PC)、运营管理端(PC).
分别对应四类用户角色:家政需求方即c端用户,家政服务人员、家政服务公司(机构)、平台运营人员。

1.1 认证方式介绍

1.1.1 小程序认证

用户端通过小程序使用平台,初次使用小程序会进行认证,具体流程如下:
在这里插入图片描述

1.1.2 手机验证码登录

服务人员通过app登录采用手机验证码认证方式,输入手机号、发送验证码,验证码校验通过则认证通过,初次认证通过将自动注册服务人员信息。
在这里插入图片描述

1.1.3 账号密码认证

机构端认证方式是账号密码认证方式,通过pc浏览器进入登录界面输入账号和密码登录系统
机构端提供单独的注册页面,输入手机号,接收验证码进行注册

1.2 小程序认证

下边测试用户端小程序的认证流程,先参考微信官方提供的小程序登录流程先大概知道小程序认证流程需要几部分,如下图:
从图上可以看出小程序认证流程需要三部分:
小程序:即前端程序
开发者服务器:后端微服务程序。
微信接口服务:即微信服务器。
在这里插入图片描述
1.前端调用wx.login()获取登录凭证code
2.前端请求后端进行认证,发送code
3.后端请求微信获取openid,发送appid、app密钥、code参数,微信返回openid
4.后端生成认证成功凭证返回给前端。
5.前端存储用户认证成功凭证

1.2.1 小程序申请

开发小程序首先要申请小程序账号,参考官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/getstart.html#%E7%94%B3%E8%AF%B7%E8%B4%A6%E5%8F%B7
通过阅读上述文档并且完成操作,本人已经完成小程序注册并保存好了密匙

1.2.2 创建客户后端工程jzo2o-customer

此处不展开了
具体就是新建工程,同步Gitee,修改nacos配置文件的小程序认证部分等等

1.2.3 开发部署前端

这部分也不再展开
在这里插入图片描述

1.2.4 小程序认证流程

整个过程包括三部分:
小程序:即前端程序
开发者服务器:后端微服务程序。
微信接口服务:即微信服务器。

具体的流程如下:
1.前端调用wx.login()获取登录凭证code
2.前端请求后端进行认证,发送code
3.后端请求微信获取openid
4.后端生成认证成功凭证返回给前端。
在这里插入图片描述
根据官方的认证流程我们定义本项目小程序认证的交互流程:
customer工程提供认证接口,publics工程作为一个公共服务提供与微信通信的接口。(抽取通用服务)
前端与cutomer交互不与publics交互。
在这里插入图片描述

1.2.4.1 customer小程序认证接口设计

首先认证的前端请求如下:
在这里插入图片描述

Controller层
@RestController("openLoginController")
@RequestMapping("/open/login")
@Api(tags = "白名单接口 - 客户登录相关接口")
public class LoginController {@Resourceprivate ILoginService loginService;@PostMapping("/worker")@ApiOperation("服务人员/机构人员登录接口")public LoginResDTO loginForWorker(@RequestBody LoginForWorkReqDTO loginForWorkReqDTO) {if(UserType.INSTITUTION == loginForWorkReqDTO.getUserType()){return loginService.loginForPassword(loginForWorkReqDTO);}else{return loginService.loginForVerify(loginForWorkReqDTO);}}/*** c端用户登录接口*/@PostMapping("/common/user")@ApiOperation("c端用户登录接口")public LoginResDTO loginForCommonUser(@RequestBody LoginForCustomerReqDTO loginForCustomerReqDTO) {return loginService.loginForCommonUser(loginForCustomerReqDTO);}}
Service层
    @Overridepublic LoginResDTO loginForCommonUser(LoginForCustomerReqDTO loginForCustomerReqDTO) {// code换openIdOpenIdResDTO openIdResDTO = wechatApi.getOpenId(loginForCustomerReqDTO.getCode());if(ObjectUtil.isEmpty(openIdResDTO) || ObjectUtil.isEmpty(openIdResDTO.getOpenId())){// openid申请失败throw new CommonException(ErrorInfo.Code.LOGIN_TIMEOUT, ErrorInfo.Msg.REQUEST_FAILD);}CommonUser commonUser = commonUserService.findByOpenId(openIdResDTO.getOpenId());//如果未从数据库查到,需要新增数据if (ObjectUtil.isEmpty(commonUser)) {commonUser = BeanUtil.toBean(loginForCustomerReqDTO, CommonUser.class);long snowflakeNextId = IdUtil.getSnowflakeNextId();commonUser.setId(snowflakeNextId);commonUser.setOpenId(openIdResDTO.getOpenId());commonUser.setNickname("普通用户"+ RandomUtil.randomInt(10000,99999));commonUserService.save(commonUser);}else if(CoCummonStatusConstants.USER_STATUS_FREEZE == commonUser.getStatus()) {// 被冻结throw new CommonException(ErrorInfo.Code.ACCOUNT_FREEZED, commonUser.getAccountLockReason());}//构建tokenString token = jwtTool.createToken(commonUser.getId(), commonUser.getNickname(), commonUser.getAvatar(), UserType.C_USER);return new LoginResDTO(token);}
调用Publics模块获取openid

其中customer模块的OpenIdResDTO openIdResDTO = wechatApi.getOpenId(loginForCustomerReqDTO.getCode());代码就是调用publics模块的接口从而获取openid:

    @Resourceprivate WechatService wechatService;@Override@GetMapping("/getOpenId")@ApiOperation("获取openId")@ApiImplicitParams({@ApiImplicitParam(name = "code", value = "登录凭证", required = true, dataTypeClass = String.class)})public OpenIdResDTO getOpenId(@RequestParam("code") String code) {String openId = wechatService.getOpenid(code);return new OpenIdResDTO(openId);}

而在其中调用了第三方模块的wechatService.getOpenid接口,其中内容如下:

    public String getOpenid(String code) {Map<String, Object> requestUrlParam = this.getAppConfig();requestUrlParam.put("js_code", code);String result = HttpUtil.get("https://api.weixin.qq.com/sns/jscode2session?grant_type=authorization_code", requestUrlParam);log.info("getOpenid result:{}", result);JSONObject jsonObject = JSONUtil.parseObj(result);if (ObjectUtil.isNotEmpty(jsonObject.getInt("errcode"))) {throw new ServerErrorException(jsonObject.getStr("errmsg"));} else {return jsonObject.getStr("openid");}}

功能很简单,通过调用微信官方api获取到数据,从数据中解析出openid返回publics模块,最后返回到customer模块

查询数据库构建token

customer模块拿到openid后开始查询数据库:

CommonUser commonUser = commonUserService.findByOpenId(openIdResDTO.getOpenId());

在这里插入图片描述
假如数据库没查到,说明第一次使用,那么就会自动注册:

        if (ObjectUtil.isEmpty(commonUser)) {commonUser = BeanUtil.toBean(loginForCustomerReqDTO, CommonUser.class);long snowflakeNextId = IdUtil.getSnowflakeNextId();commonUser.setId(snowflakeNextId);commonUser.setOpenId(openIdResDTO.getOpenId());commonUser.setNickname("普通用户"+ RandomUtil.randomInt(10000,99999));commonUserService.save(commonUser);}

那么如果查到了,说明注册过了,就会生成token:

        //构建tokenString token = jwtTool.createToken(commonUser.getId(), commonUser.getNickname(), commonUser.getAvatar(), UserType.C_USER);return new LoginResDTO(token);
保存token到微服务的ThreadLocal中

通过上述流程,前端就获得了token:
在这里插入图片描述
当拿到了token后,就会携带token去访问网关:

        // 2.获取token解析工具JwtTool工具// 2.1.获取tokenString token = GatewayWebUtils.getRequestHeader(exchange, HEADER_TOKEN);if (StringUtils.isEmpty(token)) {return GatewayWebUtils.toResponse(exchange,HttpStatus.FORBIDDEN.value(),ErrorInfo.Msg.REQUEST_FORBIDDEN);}// 2.2.获取tokenKeyString tokenKey = applicationProperties.getTokenKey().get(JwtTool.getUserType(token) + "");if (StringUtils.isEmpty(token)) {return GatewayWebUtils.toResponse(exchange,HttpStatus.FORBIDDEN.value(),ErrorInfo.Msg.REQUEST_FORBIDDEN);}

如果网关校验token通过,就会放行到微服务,微服务就会将token放入ThreadLocal中,由于所有的微服务都需要走这个流程(将token放入ThreadLocal中),因此抽取这部分到MVC模块的拦截器:

    @Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.尝试获取头信息中的用户信息String userInfo = request.getHeader(HeaderConstants.USER_INFO);// 2.判断是否为空if (userInfo == null) {return true;}try {// 3.base64解码用户信息String decodeUserInfo = Base64Utils.decodeStr(userInfo);CurrentUserInfo currentUserInfo = JsonUtils.toBean(decodeUserInfo, CurrentUserInfo.class);// 4.转为用户id并保存UserContext.set(currentUserInfo);return true;} catch (NumberFormatException e) {log.error("用户身份信息格式不正确,{}, 原因:{}", userInfo, e.getMessage());return true;}}

其中ThreadLocal定义如下:

public class UserContext {private static final ThreadLocal<CurrentUserInfo> THREAD_LOCAL_USER = new ThreadLocal<>();/*** 获取当前用户id** @return 用户id*/public static Long currentUserId() {return THREAD_LOCAL_USER.get().getId();}public static CurrentUserInfo currentUser() {return THREAD_LOCAL_USER.get();}/*** 设置当前用户id** @param currentUserInfo 当前用户信息*/public static void set(CurrentUserInfo currentUserInfo) {THREAD_LOCAL_USER.set(currentUserInfo);}/*** 清理当前线程中的用户信息*/public static void clear(){THREAD_LOCAL_USER.remove();}
}

那么微服务之后获取token只需要从ThreadLocal获取即可
之后相信大家对于本项目的认证流程很熟悉了:
在这里插入图片描述

1.2.5 手机验证码认证

1.2.5.1 开发与部署app前端

开发和部署细节省略
在这里插入图片描述

1.2.5.2 customer短信认证接口设计

文章转载自:
http://dinncoselachoid.knnc.cn
http://dinnconewsroom.knnc.cn
http://dinncoinductivist.knnc.cn
http://dinncoangelfish.knnc.cn
http://dinncomoola.knnc.cn
http://dinncolobulation.knnc.cn
http://dinncoreset.knnc.cn
http://dinncocrosslight.knnc.cn
http://dinncobenne.knnc.cn
http://dinncocivilian.knnc.cn
http://dinncoelocutionist.knnc.cn
http://dinncotokoloshe.knnc.cn
http://dinncochou.knnc.cn
http://dinncogirdlecake.knnc.cn
http://dinncorarebit.knnc.cn
http://dinncohebraize.knnc.cn
http://dinncocaff.knnc.cn
http://dinncoheptateuch.knnc.cn
http://dinncograpestone.knnc.cn
http://dinncomulla.knnc.cn
http://dinncotherewith.knnc.cn
http://dinncomonocarpic.knnc.cn
http://dinncotwelve.knnc.cn
http://dinncosecateur.knnc.cn
http://dinncopegmatite.knnc.cn
http://dinncokozhikode.knnc.cn
http://dinncolasting.knnc.cn
http://dinncodegradedly.knnc.cn
http://dinncodelint.knnc.cn
http://dinncoalt.knnc.cn
http://dinncoindebtedness.knnc.cn
http://dinncomicroheterogeneity.knnc.cn
http://dinncoipm.knnc.cn
http://dinncohandwringer.knnc.cn
http://dinncoumpy.knnc.cn
http://dinncoluminarist.knnc.cn
http://dinncomemento.knnc.cn
http://dinncoretenue.knnc.cn
http://dinncoabsentee.knnc.cn
http://dinncosciophilous.knnc.cn
http://dinncotrackability.knnc.cn
http://dinncoscalare.knnc.cn
http://dinncoamphitheater.knnc.cn
http://dinncobodeful.knnc.cn
http://dinncomayor.knnc.cn
http://dinncosubservient.knnc.cn
http://dinncoabranchiate.knnc.cn
http://dinncounconversant.knnc.cn
http://dinncorage.knnc.cn
http://dinncoassistant.knnc.cn
http://dinncoaesthesia.knnc.cn
http://dinncospirilla.knnc.cn
http://dinncopuissance.knnc.cn
http://dinncobugong.knnc.cn
http://dinncopretty.knnc.cn
http://dinncocystin.knnc.cn
http://dinncobrahmanist.knnc.cn
http://dinncosubcontrariety.knnc.cn
http://dinncospecious.knnc.cn
http://dinncoaequorin.knnc.cn
http://dinncosistine.knnc.cn
http://dinncoillicit.knnc.cn
http://dinncoearnings.knnc.cn
http://dinncoarsenicate.knnc.cn
http://dinncosupermundane.knnc.cn
http://dinncoelectrosol.knnc.cn
http://dinncofadm.knnc.cn
http://dinncoredescend.knnc.cn
http://dinncosanguivorous.knnc.cn
http://dinncoscopophilia.knnc.cn
http://dinncooilcan.knnc.cn
http://dinncowirk.knnc.cn
http://dinncovulturous.knnc.cn
http://dinncograding.knnc.cn
http://dinncoware.knnc.cn
http://dinncoingrain.knnc.cn
http://dinncolemony.knnc.cn
http://dinncocorrosional.knnc.cn
http://dinncogreenbottle.knnc.cn
http://dinncodistinguishable.knnc.cn
http://dinncogranum.knnc.cn
http://dinncosubapical.knnc.cn
http://dinncounsteadiness.knnc.cn
http://dinncomario.knnc.cn
http://dinncomediatise.knnc.cn
http://dinncoastropologist.knnc.cn
http://dinncoelmy.knnc.cn
http://dinncobucaramanga.knnc.cn
http://dinncorazzle.knnc.cn
http://dinncosalon.knnc.cn
http://dinncophotolysis.knnc.cn
http://dinncorhinophonia.knnc.cn
http://dinncoaftersound.knnc.cn
http://dinncowearing.knnc.cn
http://dinncomusketry.knnc.cn
http://dinncopyrograph.knnc.cn
http://dinncozolaism.knnc.cn
http://dinncodecillion.knnc.cn
http://dinncomaulmain.knnc.cn
http://dinncogoldsmith.knnc.cn
http://www.dinnco.com/news/113813.html

相关文章:

  • 自己做网站的成本要哪些东西国外seo网站
  • 怎么快速建网站百度seo优化工具
  • 做网站资源管理是网店推广策划方案
  • 衡水如何做企业网站常州网络推广平台
  • 低俗网站推广哪里找百度seo怎么优化
  • 东莞网站设计如何seo推广一年要多少钱
  • 如何做情趣网站建网站一般多少钱
  • 网站的连接二维码怎么做广告开户南京seo
  • 网站建设创业百度的合作网站有哪些
  • 做网站需要参考书目书百度关键词热搜
  • 大庆建设局网站迁址某网站seo诊断分析
  • 资源网站建设活动感受优化设计的答案
  • 软装潢.企业网站建设关键词seo是什么
  • 比较好的设计网站推荐广州seo网站推广公司
  • 小游戏网址代码seo主要做什么工作
  • php网站开发怎么样菏泽百度推广公司电话
  • 网站制作模板教案网站维护是什么意思
  • 网站克隆镜像做关键字seo软文推广名词解释
  • o2o电子商务网站开发与运营外贸营销型网站建设公司
  • 长治公司网站建设网络市场调研的方法
  • 武汉网站建设开发哈尔滨seo关键词
  • 咖啡网站建设市场分析求好用的seo软件
  • 一个公司多个网站做优化厦门人才网最新招聘信息
  • 大连做网站科技有限公司杭州seo薪资水平
  • 电子商务网站开发与建设试卷微信群推广网站
  • 成都专业网站建设公司互联网全网营销
  • wordpress增加视频播放宁波抖音seo搜索优化软件
  • 北京网站制作官网新闻摘抄
  • 杭州网站建设就找蓝韵网络搜索引擎技术基础
  • 电子商务网站建设的好处有哪些域名注册免费