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

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

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

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

时间: 2024-07-31 13:18:22

koa使用koa-passport实现路由进入前登录验证的相关文章

vue2.0 实现导航守卫(路由守卫)---登录验证

路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navigation-guards). 导航守卫(navigation-guards)这个名字,听起来怪怪的,但既然官方文档是这样翻译的,就姑且这么叫吧. 贴上文档地址:https://router.vuejs.org/zh-cn/advanced/navigation-guards.html 全局守卫 你可以使用 router.beforeEa

Python(73)_装饰器函数练习_执行函数前登录验证

#-*-coding:utf-8-*- import os import time from functools import wraps ''' 1.编写装饰器,为多个函数加上认证的功能(用户的账号和密码来源于文件) 2.要求登录一次,后续函数都无需输入用户名和密码 ''' FLAG = False def login(func): def inner(*args,**kwargs): global FLAG ''' 登录程序 ''' if FLAG: ret = func(*args, **

购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证

原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP.NET Web API的购物车案例,非常精彩,这里这里记录下对此项目的理解. 文章:http://chsakell.com/2015/01/31/angularjs-feat-web-api/http://chsakell.com/2015/03/07/angularjs-feat-web-api-

SpringBoot20 集成SpringSecurity02 -> 利用SpringSecurity进行前后端分离的登录验证

1 SpirngBoot环境搭建 创建一个SpringBoot项目即可,详情参见三少的相关博文 参考博文 -> 点击前往 SpirngBoot项目脚手架 -> 点击前往 2 引入SpirngSecurity依赖 技巧01:引入了springSecurity相关依赖后,项目就会被SpringSecurity进行管理了:默认的登录名为user,登录密码会被打印到控制台上 技巧02:SpringSecurity默认的配置使用的是 <!--spring-security相关--> <

路由实现登录验证

路由验证用 router.beforeEach( (to, from, next) => { } meta:{requireAuth:true}, 使用meta和路由守卫设置登录权限 原文地址:https://www.cnblogs.com/zbx-boke/p/9651755.html

理解Web路由(浅谈前后端路由与前后端渲染)

1.什么是路由? 在Web开发过程中,经常会遇到『路由』的概念.那么,到底什么是路由?简单来说,路由就是URL到函数的映射. 2.router 和 route 的区别 route就是一条路由,它将一个URL路径和一个函数进行映射,例如: /users -> getAllUsers() /users/count -> getUsersCount() 这就是两条路由,当访问 /users 的时候,会执行 getAllUsers() 函数:当访问 /users/count 的时候,会执行 getUs

form的onsubmit事件--表单提交前的验证最佳实现方式

连续2天,在进行form表单包括上传表单的提交操作时,刚开始用struts2自带的上传模式与后台进行交互,但原来的页面是用html做的,不能通过国际化资源来返回后台操作的错误信息于静态的html,之后我又百度了许多ajax异步与后台交互的方法,如ajaxForm,ajaxSubmit,ajaxFileUpload等,用的是心力交瘁,各种错误抛出,然后还尝试easyui的表单提交,还是不成...这一切的目的都是为了实现异步交互,不让当前页面跳转,使用ajax实现文件上传的异步刷新,最后还是死心了,

express+nodecoffee写passport登录验证实例(二)

二:实现登录认证 passport官网文档:  http://passportjs.org/guide/ passport验证使用一种被称为“策略”的方式来验证请求,策略支持3种类型的验证:用户名密码验证:OAuth委派验证,OpenID等联合身份验证(facebook,twitter等). 联合身份认证可参考这里 常用的是LocalStrategy策略来为用户名密码验证,它通过use()函数来调用. 使用步骤: 1:安装模块,passport 和 passport-local 2:添加引用 p

GNS3 模拟网络路由交换远程登录

实验目的:用pc远程登录到交换机和路由器 首先配置IP C1:192.168.75.10/24 SW1--vlan1:192.168.75.20/24 R1f0/0:192.168.75.1/24 SW1配置: R1配置: 路由器和交换机配置完毕 注:如果只配置了远程登录密码不配置特权模式密码,远程只能进入用户模式无法进入特全模式要想进入特权就要设置一下特权密码 PC配置: 首先要打开telnet服务 打开控制面板→程序→启动或关闭windows功能→启动telnet服务器和客户端 设置一下PC