码迷,mamicode.com
首页 > 其他好文 > 详细

koa使用koa-passport实现路由进入前登录验证

时间:2018-05-25 16:06:24      阅读:699      评论:0      收藏:0      [点我收藏+]

标签:用户名   OLE   mongodb   集成   col   sync   成功   direct   port   

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

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

koa使用koa-passport实现路由进入前登录验证

标签:用户名   OLE   mongodb   集成   col   sync   成功   direct   port   

原文地址:https://www.cnblogs.com/beileixinqing/p/9088890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!