如今的项目需求很简单,当进入一个页面的时候,若是没登陆,则跳转到登陆页面,若是登陆了则直接到对应页面。mongodb
koa2写的项目,使用koa-passport,koa-session,根据koa-passport的segmentfault
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:session
router.get('/userList', User.renderUserList)
passport.js:koa
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
问题:目前用async
isAuthenticated()来判断是否登陆只会在单个路由中分别判断,想问下你们有没有办法能够把这个判断是否登陆的方法集成成一个方法,而后每一个路由去使用。欢迎你们留言!