koa+passport+mongoose的身份驗證中間件的應用配置

一、koa+passport+mongoose的初應用配置

  1. koa創建的工程項目中,通過 npm i mongoose koa-passport passport-local命令下載對應的工具
  2. 創建 users.js 文件,引入 mongooseSchema 是用於定義一些數據表操作,而module是與表操作的相關行爲,model 關聯 Schema,對外暴露 UserSchema模型,代碼如下所示:
import mongoose from 'mongoose'

const Schema = mongoose.Schema

const UserSchema = new Schema({
    username: {
        type: String,
        // 唯一值
        unique: true,
        // 必填項
        require: true
    },
    password: {
        type: String,
        require: true
    },
    email: {
        type: String,
        require: true
    }
})

export default mongoose.model('User', UserSchema)

  1. 創建 passport.js 文件,引入 koa-passportpassport-localusers,代碼如下所示:
import passport from 'koa-passport'
import LocalStrategy from 'passport-local'
import UserModel from '../../dbs/models/users'
  1. PassportNode.jsExpress兼容身份驗證中間件,Passport的唯一目的是對請求進行身份驗證,它通過一組稱爲策略的可擴展插件來完成。我們向Passport提供身份驗證請求,而Passport提供鉤子來控制身份驗證成功或失敗時發生的情況。Passport使用策略的概念來驗證請求。策略的範圍包括驗證用戶名和密碼憑據,使用OAuth委託的身份驗證或使用OpenID的聯合身份驗證。在passport中使用 LocalStrateg進行身份驗證,根據用戶名進行查找。查詢結果不爲空,當密碼相等時驗證通過,否則驗證失敗,查詢結果爲空時也提示用戶不存在,代碼如下所示:
passport.use(new LocalStrategy(async function (username, password, done) {
    let where = { username }
    let result = await UserModel.findOne(where)
    if (result != null) {
        if (result.password===password) {
            return done(null, result)
        } else {
            return done(null, false, '密碼錯誤')
        }
    } else { 
        return done(null, false, '用戶不存在')
    }
}))
  1. Passport將維持持久的登錄會話。爲了使持久會話正常工作,必須將經過身份驗證的用戶序列化到該會話,並在發出後續請求時將其反序列化。所以只需序列化用戶ID,然後在反序列化時按ID查找用戶,存 session。通過passport.serializeUser 進行序列化,通過passport.deserializeUser 進行反序列化,最後對外暴露,代碼如下所示:
passport.serializeUser(function (user, done) {
    done(null, user)
})

passport.deserializeUser(function (user, done) {
    return done(null, user)
})

export default passport
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章