TypeScript中Passport本地认证报错Unknown authentication strategy "local"如何解决
问题原因
该报错是因为localStrategy.ts中定义的本地策略没有和你在app.ts中使用的passport实例绑定,TypeScript 中调整逻辑的方法如下:
1. 调整localStrategy.ts的导出方式
将策略注册逻辑包装成可接收passport实例的函数导出:
import { Strategy as LocalStrategy } from "passport-local"; import type { PassportStatic } from "passport"; // 替换为你自己的用户数据文件路径 import { users } from "./你的用户数据文件路径"; export default function setupLocalStrategy(passport: PassportStatic) { passport.use(new LocalStrategy( function(username: string, password: string, done){ const user = users.find(u => username === u.name); console.log(user); if (!user){ return done(null, false, {message:'incorrect username'}); } if(password !== user.pw){ return done(null, false, {message:'incorrect password'}) } return done(null, user) } )); // 补充必须的序列化/反序列化逻辑,避免后续会话相关报错 passport.serializeUser((user: any, done) => { done(null, user.id); }); passport.deserializeUser((id: string, done) => { const user = users.find(u => u.id === id); done(null, user); }); }
2. 调整app.ts中的调用逻辑
在passport初始化之后,导入上面的函数并传入当前的passport实例:
import express from "express"; import passport from "passport"; // 替换为你实际的localStrategy.ts文件路径 import setupLocalStrategy from "./localStrategy"; const app = express(); app.get('/login', function(req, res){ res.render('login'); }) app.use(passport.initialize()); // 新增:注册本地策略到当前passport实例 setupLocalStrategy(passport); // 如果需要持久化登录态,还要提前配置express-session并启用该行: // app.use(passport.session()); app.post('/login', passport.authenticate('local',{ successRedirect:'/', failureRedirect:'/hhhhh', failureFlash: true }) ) const port = 4000; app.listen(port, ()=>{ console.log(`go to http://localhost:${port}`); })
内容的提问来源于stack exchange,提问作者Houcem Eddine
相关产品推荐
相关产品推荐

