流程
点击登录按钮,前端把当前的 url,传给后台
后台把 url 传给,登录页面
登录页面,点击登录,跳转到登录前的页面
效果
第一步
第二步
第三步
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() {
// 获取 returnUrl
var 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));
}
};
};
效果