expressでのpassportに関して

typescript

1import express from 'express'2import passport, { use } from 'passport'3import * as passportLocal from 'passport-local'4import LdapStrategy from 'passport-ldapauth'5import jwt from 'jsonwebtoken'6import { insertNewUserInfo, getUserInfoById } from '../db/users'7import { checkTypeUserInfo } from 'src/modules/typeChecker'8 9const router = express.Router()10const LDAP_HOST = process.env.LDAP_HOST ? process.env.LDAP_HOST : 'localhost'11const PREFERRED_STRATEGY = process.env.LDAP_HOST ? 'ldapauth' : 'local'12 13if(process.env.LDAP_HOST){14 const ldapOptions = {15 server: {16 url: `ldap://${LDAP_HOST}`,17 bindDN: 'cn=admin,dc=example,dc=com',18 bindCredentials: process.env.LDAP_PASSWORD,19 searchBase: 'ou=users,dc=example,dc=com',20 searchFilter: '(uid={{username}})'21 }22 }23 passport.use(new LdapStrategy(ldapOptions))24}else{25 const LocalStrategy = passportLocal.Strategy26 passport.use(new LocalStrategy(27 (username, password, done) => {28 console.log("Login User: " ,username)29 if(username === '' || password === ''){30 return done(null, false);31 } else {32 return done(null, {33 sAMAccountName: username,34 name: `DEV_${username}`,35 mail_address: 'invalid@app',36 })37 }38 }39 ))40}41 42 43passport.serializeUser((user, done) => {44 console.log('serialize...')45 done(null, user)46})47passport.deserializeUser((id, done) => {48 console.log('deserialize...')49 getUserInfoById(id as string).then(user => done(null, user)).catch(e => done(e, null))50})51 52router.post('/login',53 passport.authenticate(PREFERRED_STRATEGY,54 {55 session: false,56 }57 ),58 async (req, res) => {59 console.log('userInfo:',req.user)60 const userInfo = req.user as LdapUserInfo61 if(!userInfo){62 res.status(401)63 return64 }else{65 console.log('login')66 const user = await getUserInfoById(userInfo.sAMAccountName) === undefined ? await insertNewUserInfo(userInfo) as User : await getUserInfoById(userInfo.sAMAccountName) as User67 return req.login(user, (err)=>{68 if (err) { return res.status(400) }69 const token = jwt.sign(user, process.env.TOKEN || 'secret', { expiresIn: '1days' })70 res.json({ token })71 return res 72 })73 }74 }75)76 77router.post('/logout', (req, res) => {78 const user = jwt.verify(req.headers.authorization as string, process.env.TOKEN || 'secret')79 console.log(user)80 return req.logout((err)=> {81 if (err) { return res.status(400) }82 return res 83 })84})85 86export default router

コメントを投稿

0 コメント