egg(113)--egg之登录成功跳转到登录之前的页面

news/2024/7/1 7:52:46

流程

  1. 点击登录按钮,前端把当前的url,传给后台
  2. 后台把url传给,登录页面
  3. 登录页面,点击登录,跳转到登录前的页面

效果

第一步

clipboard.png

第二步

clipboard.png

第三步

clipboard.png

router

    router.get('/login', initMiddleware, controller.default.pass.login);

点击登录按钮

view

appviewdefaultpublicheader.html
<li><a href="javascript:void(0)" id="loginButton" target="_blank">登录</a></li>
apppublicdefaultjsbase.js
        initLogin: function() {$("#loginButton").click(function() {// alert(location.href);location.href = '/login?returnUrl=' + encodeURIComponent(location.href);})}

controller

appcontrollerdefaultpass.js
    async login() {//获取returnUrlvar returnUrl = this.ctx.request.query.returnUrl;returnUrl = returnUrl ? decodeURIComponent(returnUrl) : '/';await this.ctx.render('default/pass/login.html', {returnUrl: returnUrl});}

登录页面

appviewdefaultpasslogin.html
<input type="hidden" name="returnUrl" id="returnUrl" value="<%=returnUrl%>" />
            $("#doLogin").click(function(e) {var returnUrl = $('#returnUrl').val();var username = $('#username').val();var password = $('#password').val();var identify_code = $('#identify_code').val();var reg = /^[\d]{11}$/;if (!reg.test(username)) {alert('手机号输入错误');return false;}if (identify_code.length < 4) {alert('验证码长度不合法');return false;}//ajax请求$.post('/pass/doLogin', {username: username,identify_code: identify_code,password: password}, function(response) {console.log(response);if (response.success == true) {// location.href = "/";location.href = returnUrl;} else {$("#identify_code_img").attr('src', '/verify?mt=' + Math.random());alert(response.msg);}})})

去结算的登录跳转

中间件

appmiddlewareuserauth.js
module.exports = (options, app) => {return async function init(ctx, next) {//判断前台用户是否登录   如果登录可以进入 ( 去结算  用户中心)    如果没有登录直接跳转到登录var userinfo = ctx.service.cookies.get('userinfo');var prevPage = ctx.request.headers.referer; //上一个页面的地址if (userinfo && userinfo._id && userinfo.phone) {//判断数据库里面有没有当前用户                var userResutl = await ctx.model.User.find({ "_id": userinfo._id, "phone": userinfo.phone });if (userResutl && userResutl.length > 0) {//注意await next();} else {// ctx.redirect('/login');ctx.redirect('/login?returnUrl=' + encodeURIComponent(prevPage));}} else {// ctx.redirect('/login');ctx.redirect('/login?returnUrl=' + encodeURIComponent(prevPage));}};
};

效果

clipboard.png

clipboard.png

clipboard.png


http://lihuaxi.xjx100.cn/news/268217.html

相关文章

毕业典礼上,硕士情侣现场求婚!校长也被甜到全程“姨母笑”

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达本文募格学术整理。参考资料&#xff1a;梨视频、中国青年报、微博、募格学术此前报道等。太甜了&#xff01;6月18日&#xff0c;在福建师范大学的毕业典礼上&#xff0c;一…

2018年计算机职称考试冲刺,2018年中级会计职称考试考前30天冲刺计划和学习方法...

2018年中级会计职称复习进度快的小伙伴已经进入冲刺阶段的学习&#xff0c;进度稍慢的也正在进行强化阶段的收尾。那么在考前最后30天的冲刺备考中&#xff0c;大家要有怎样的备考计划和学习方法呢?一、冲刺阶段每天学习时长进入冲刺学习阶段&#xff0c;时间变得异常紧张&…

OpenCV-Python我刚写六行代码就出了个惊天BUG

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达引子最近一直在用PyQT跟python-opencv做开发&#xff0c;正好需要固定阈值二值化&#xff0c;于是我就随手写下了如下的代码片段&#xff1a;image[image > t] maxval…

tinyproxy代理

Tinyproxy 是一个轻量级的开源 web 代理守护进程&#xff0c;其设计目标是快而小。它适用于需要完整 HTTP 代理特性&#xff0c;但系统资源又不足以运行大型代理的场景&#xff0c;比如嵌入式部署。 Tinyproxy 对小规模网络非常有用&#xff0c;这样的场合下大型代理会使系统资…

2020年AI产业报告:100个岗位抢1个人,计算机视觉成最大缺口

“你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间&#xff0c;这是我们最战战兢兢的心情。但是显然&#xff0c;有些人体会不了。这份行业数据&#xff0c;让笔者“柠檬”了。1疫情下&#xff0c;有的公司宣布破产有的公司增长413%疫情期间&#xff0c;人工智能的价值…

Scrapy框架模拟Github网站登陆

1. 以往的模拟登陆的方法 1.1 requests模块是如何实现模拟登陆的&#xff1f; 直接携带cookies请求页面找url地址&#xff0c;发送post请求存储cookie 1.2 selenium是如何模拟登陆的&#xff1f; 找到对应的input标签&#xff0c;输入文本点击登陆 1.3 scrapy的模拟登陆 直…

metasploit-smb扫描获取系统信息

1.msfconsle 2.use auxiliary/scanner/smb/smb_version 3. msf auxiliary(smb_version) > set RHOSTS 172.16.62.1-200RHOSTS > 172.16.62.1-200msf auxiliary(smb_version) > set THREADS 100THREADS > 100msf auxiliary(smb_version) > run 4.扫描结果&#x…

微信支付服务器demo,集成微信支付(附带demo)

首先忽略掉申请AppKey的步骤&#xff0c;直接从集成开始1、cocopods集成SDKpod WechatOpenSDK2、添加依赖库SystemConfiguration.framework, libz.tbd, libsqlite3.0.tbd, libc.tbd, Security.framework, CoreTelephony.framework, CFNetwork.framework.3、设置URL Schemes为您…