Kooa 2権限認証中間件-----Passport
3995 ワード
Kooa統合権限認証中間件のPassport
前言
まだkoa 2の権限管理に悩んでいますか?この文章はあなたの悩みを解決します!!expressフレームの権限フレームpassportについてはよく知らないかもしれませんが、coa 2の権限管理ミドルウェアが不足しています.特に最も2.0バージョン以上のKooaは、生態は現在完全にスタート段階から出ています.しかし、オープンソースの力はいつまでも一番強いです.必要があれば、解決策があると思います.この時、koa-passportが誕生しました.
考え方
1、passportミドルウェアの公式はexpressに対するサポートを提供しただけです.しかし、これに対して、koaは対応するオープンソース集積バージョン「koa-passport」があります.
2、koa-passportは本質的に全く新しく実現された別のバージョンのpassportではなく、中間部品として、元のpassportからexpressに対する支持をkoaに転送しました.ソースを分析することによって、それは実際にはexpressのreqとresのAPIメソッドに結合されていることが分かります.
3、ツッコミを入れるところは、KOa-passportの公式文書の詳細な使い方と説明であり、公式に提供されたデモをそのまま使用しています.koa-passport-exampleプロジェクトは、修正しないと認証機能が完成しません.googleとbaiduの資料がたくさんありますが、残念ながら、この二つの統合記事についてはあまり多くないようです.関連しているのはすべて比較的に古いバージョンの文章です.あるいは実践しても効果がない文章です.あまり参考になりません.
この機会に、koa-passportとpassportのソースコードを分析して得られた成果を皆様に分かち合います.
ステップ
第一に、koa-passportを設置する.
【UserModelはデータベースクエリパッケージです.ここでは省略します.】
【ここで使うのは、koa-routerのkoa 2バージョンです】
前言
まだkoa 2の権限管理に悩んでいますか?この文章はあなたの悩みを解決します!!expressフレームの権限フレームpassportについてはよく知らないかもしれませんが、coa 2の権限管理ミドルウェアが不足しています.特に最も2.0バージョン以上のKooaは、生態は現在完全にスタート段階から出ています.しかし、オープンソースの力はいつまでも一番強いです.必要があれば、解決策があると思います.この時、koa-passportが誕生しました.
考え方
1、passportミドルウェアの公式はexpressに対するサポートを提供しただけです.しかし、これに対して、koaは対応するオープンソース集積バージョン「koa-passport」があります.
2、koa-passportは本質的に全く新しく実現された別のバージョンのpassportではなく、中間部品として、元のpassportからexpressに対する支持をkoaに転送しました.ソースを分析することによって、それは実際にはexpressのreqとresのAPIメソッドに結合されていることが分かります.
3、ツッコミを入れるところは、KOa-passportの公式文書の詳細な使い方と説明であり、公式に提供されたデモをそのまま使用しています.koa-passport-exampleプロジェクトは、修正しないと認証機能が完成しません.googleとbaiduの資料がたくさんありますが、残念ながら、この二つの統合記事についてはあまり多くないようです.関連しているのはすべて比較的に古いバージョンの文章です.あるいは実践しても効果がない文章です.あまり参考になりません.
この機会に、koa-passportとpassportのソースコードを分析して得られた成果を皆様に分かち合います.
ステップ
第一に、koa-passportを設置する.
npm install koa-bodyparser --save
npm install passport --save
npm install passport-local --save
npm install koa-passport --save
npm install koa-session2 --save 【 koa-session, 】
第二に、passportプロファイルpassport_を作成します.config.js【UserModelはデータベースクエリパッケージです.ここでは省略します.】
const passport = require('koa-passport')
const LocalStrategy = require('passport-local')
const UserModel = require(__dirname + '/../../src/model/UserModel')
//
passport.use(new LocalStrategy(
/**
* @param username
* @param password
* @param done , passport
*/
function (username, password, done) {
let where = { where: { username: username } }
UserModel.findOne(where).then(function (result) {
if (result != null) {
if (result.password == password) {
return done(null, result)
} else {
return done(null, false, ' ')
}
} else {
return done(null, false, ' ')
}
}).catch(function (err) {
log.error(err.message)
return done(null, false, { message: err.message })
})
}
))
// serializeUser session
passport.serializeUser(function (user, done) {
done(null, user)
})
// deserializeUser session
passport.deserializeUser(function (user, done) {
return done(null, user)
})
module.exports = passport
第三に、認証ルートを作成するxauth.js【ここで使うのは、koa-routerのkoa 2バージョンです】
//
const Router = require('koa-router')
//
const router = new Router()
//
const passport = require(__dirname + '/passport_config.js')
/**
*
*/
router.post('/xauth/login', function (ctx, next) {
return passport.authenticate('local', function (err, user, info, status) {
if (user) {
ctx.body = 'Y'
return ctx.login(user)
} else {
ctx.body = info
}
})(ctx, next)
})
/**
*
*/
router.get('/xauth/logout', function (ctx, next) {
ctx.logout()
ctx.body = 'Y'
})
//
router.post('/xauth/test', function (ctx, next) {
if (ctx.isAuthenticated()) {
ctx.body = ' '
} else {
ctx.throw(401)
ctx.body = ' '
}
})
module.exports = router
最後に、KooaのAppでpassportを初期化し導入する.//
const bodyParser = require('koa-bodyparser')
const mount = require('koa-mount')
const session = require("koa-session2")
const passport = require(__dirname + '/src/auth/passport_config.js')
const xauth = require(__dirname + '/src/auth/xauth.js')
//
const app = new Koa()
//
app.proxy = true
app.use(session({key: "SESSIONID"}))
app.use(bodyParser())
app.use(passport.initialize())
app.use(passport.session())
app.use(mount('/',xauth.routes()))