You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:54:06