现在的项目需求很简单,当进入一个页面的时候,如果没登录,则跳转到登录页面,如果登录了则直接到对应页面。

koa2写的项目,使用koa-passport,koa-session,根据koa-passport的

isAuthenticated()来判断是否登录。

这篇文章写的很好:===》https://segmentfault.com/a/1190000011557953

我的其中一个路由代码;
controllers:
exports.renderUserList = async (ctx, next) => {
if (ctx.isAuthenticated()) {
console.log(ctx.state.user)
console.log(ctx)
let data = await userDao.userList()
await ctx.render('userList', {
title: '员工列表',
csrf: ctx.csrf,
data: data
})
}else {
ctx.redirect('/login')
}
}

router.js:

router.get('/userList', User.renderUserList)

passport.js:

const passport = require('koa-passport')
const User = require('../models/user')
const log4js = require('koa-log4')
const logger = log4js.getLogger('passport')
const LocalStrategy = require('passport-local').Strategy
const md5 = require('md5') passport.use(new LocalStrategy(
/**
* @param username 用户输入的用户名
* @param password 用户输入的密码
* @param done 验证验证完成后的回调函数,由passport调用
*/
function (username, password, done) {
User.findOne({username: username},function (err,result) {
if (result !== null) {
if (result.password === md5(password)) {
return done(null, doPassword(result),'登录成功')
} else {
return done(null, false, '密码错误')
}
} else {
return done(null, false, '用户不存在')
}
}).catch(function (err) {
logger.error(err.message)
return done(null, false, {message: err.message})
})
}
)) // serializeUser 在用户登录验证成功以后将会把用户的数据存储到 session 中
passport.serializeUser(function (user, done) {
done(null, user)
}) // deserializeUser 在每次请求的时候将从 mongodb 中读取用户对象
passport.deserializeUser(function (id, done) {
console.log(id)
User.findById(id, function (err, user) {
done(err, doPassword(user))
})
// done(null, user)
}) //隐藏密码,相当于是去掉密码的用户信息保存在session里
function doPassword(user) {
if(user) {
user.password = ''
return user
} else {
return null
}
} module.exports = passport

问题:目前用

isAuthenticated()来判断是否登录只会在单个路由中分别判断,想问下大家有没有办法可以把这个判断是否登录的方法集成成一个方法,然后每个路由去使用。欢迎大家留言!

最新文章

  1. thinkphp 缓存数据
  2. 解决cefsharp在winform中不显示tooltipText问题(网页元素的title提示)
  3. jenkins中submodule的使用
  4. vb.net dll创建
  5. HTTPS, SPDY和 HTTP/2性能的简单对比
  6. Maven下载安装
  7. UML系列05之 基本流程图
  8. Java程序执行过程
  9. Cube Stacking(并差集深度+结点个数)
  10. WPF MVVM 架构 Step By Step(6)(把actions从view model解耦)
  11. [array] leetCode-27. Remove Element - Easy
  12. xpath定位动态iframe
  13. react rem
  14. flask(1)
  15. JSP总结(二)—Cookie(汇总)
  16. 匿名内部类中使用的外部局部变量为什么只能是final变量
  17. 修改placeholder的值---input-placeholder
  18. 通过更改服务器解决双系统ubuntu时间+8
  19. javaSE——字符流
  20. [从jQuery看JavaScript]-匿名函数与闭包

热门文章

  1. 基于jQuery Tooltips悬停提示效果
  2. java基础篇---网络编程(TCP程序设计)
  3. WebSphere ILOG JRules 规则引擎运行模式简介
  4. 用Total Commander for Android管理应用程序
  5. 2017 码云最火爆开源项目 TOP 50,你都用过哪些
  6. Django的安装要点
  7. AT24Cxx(EEPROM)子系统
  8. Spark内存管理之钨丝计划
  9. windows 7 下安装 vagrant + Oracle VM VirtualBox
  10. PCL中使用FLANN库(1)