koa使用koa-passport实现路由进入前登录验证
2024-10-15 13:50:54
现在的项目需求很简单,当进入一个页面的时候,如果没登录,则跳转到登录页面,如果登录了则直接到对应页面。
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()来判断是否登录只会在单个路由中分别判断,想问下大家有没有办法可以把这个判断是否登录的方法集成成一个方法,然后每个路由去使用。欢迎大家留言!
最新文章
- thinkphp 缓存数据
- 解决cefsharp在winform中不显示tooltipText问题(网页元素的title提示)
- jenkins中submodule的使用
- vb.net dll创建
- HTTPS, SPDY和 HTTP/2性能的简单对比
- Maven下载安装
- UML系列05之 基本流程图
- Java程序执行过程
- Cube Stacking(并差集深度+结点个数)
- WPF MVVM 架构 Step By Step(6)(把actions从view model解耦)
- [array] leetCode-27. Remove Element - Easy
- xpath定位动态iframe
- react rem
- flask(1)
- JSP总结(二)—Cookie(汇总)
- 匿名内部类中使用的外部局部变量为什么只能是final变量
- 修改placeholder的值---input-placeholder
- 通过更改服务器解决双系统ubuntu时间+8
- javaSE——字符流
- [从jQuery看JavaScript]-匿名函数与闭包