[英]Using Passport.js with Typescript
This is my passport local config.这是我的护照本地配置。 I'm wrapping it inside a function so I can use it some where else:我将它包装在一个函数中,这样我就可以在其他地方使用它:
export const LocalPassport = (passport: any, strategy: any) => {
passport.use(
new strategy(
{
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true,
session: false,
},
async (req: Request, email: string, password: string, done: any) => {
try {
const user = await AuthService.findUserByEmail(email)
if (!user) {
return done(null, false)
}
const passCheck = bcrypt.compare(password, user.password)
if (!passCheck) {
return done(null, false)
}
return done(null, user)
} catch (error) {
console.log(error)
}
}
)
)
}
And I use it in my login router:我在我的登录路由器中使用它:
import express from 'express'
import passport from 'passport'
import Strategy from 'passport-local'
import bodyParser from 'body-parser'
import { createUser } from '../controllers/auth'
import FormValidate from '../middlewares/FormValidate'
import { LocalPassport } from '../config/passport'
import User from '../models/User'
LocalPassport(passport, Strategy.Strategy)
const router = express.Router()
router.use(passport.initialize())
router.use(bodyParser.urlencoded({ extended: false }))
router.use(bodyParser.json())
//**path for api/v1/auth */
router.post('/register', FormValidate.register, createUser)
router.post('/login', passport.authenticate('local'), async (req, res) => {
try {
res.send('logged in')
} catch (error) {
console.log(error)
}
})
export default router
When I test this route from postman, I received a long list of errors, but it starts with: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined I tried to console.log
and I can see bcrypt compares return true
, I believe the error happens after done
is invoked当我从邮递员那里测试这条路线时,我收到了一长串错误,但它以: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined我试图console.log
并且我可以看到 bcrypt compares 返回true
,我相信错误调用done
后发生
What am I doing wrong here ??我在这里做错了什么? And how should I replace the any
types in passport config file.我应该如何替换护照配置文件中的any
类型。 Thanks for your help.谢谢你的帮助。
So I figured the error was because I did not set up session for passport, and after authentication it tried to set up a session, hence the error.所以我认为错误是因为我没有为护照设置会话,并且在身份验证后它尝试设置一个会话,因此出现了错误。 I fixed this by:我通过以下方式解决了这个问题:
router.post('/login', passport.authenticate('local', {session: false}), async (req, res) => {
try {
res.send('logged in')
} catch (error) {
console.log(error)
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.