无法运行护照登录策略。身份验证错误~ TypeError: Cannot read property 'authenticate' of undefined

Posted

技术标签:

【中文标题】无法运行护照登录策略。身份验证错误~ TypeError: Cannot read property \'authenticate\' of undefined【英文标题】:Trouble running passport login Strategy. Authentication error~ TypeError: Cannot read property 'authenticate' of undefined无法运行护照登录策略。身份验证错误~ TypeError: Cannot read property 'authenticate' of undefined 【发布时间】:2021-12-27 16:35:45 【问题描述】:

我尝试过的事情

将身份验证直接移动到服务器中 卸载并重新安装以下(及其对应的类型): 护照 passport-jwt 本地护照

所有这些仍然会导致收到以下错误消息:“TypeError: Cannot read property 'authenticate' of undefined”~使应用程序崩溃

代码

服务器文件

import * as express from "express";
import apiRouter from "./routes/index";
import * as passport from 'passport';
import * as PassportLocal from 'passport-local';


import './middleware/passport-stradegies';

const app = express();


app.use(passport.initialize());
app.use(express.static("public"));
app.use(express.json());
app.use(apiRouter);

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Server listening on port: $port`));



护照登录代码

import * as passport from 'passport';
import * as PassportLocal from 'passport-local';
import blogs from "../db/blogs";
import  compareHash  from "../utils";

passport.serializeUser((user, done)=> done(null, user));
passport.deserializeUser((user, done)=> done(null, user));

passport.use(new PassportLocal.Strategy(
    usernameField: 'email'
,async (email, password, done) =>
    try 
         const [userFound] = await blogs.find("email", email);
          if (userFound && compareHash(password, userFound.userpassword)) 
            done(null, userFound);
    else
        done(null, false);
    
     catch (error) 
        done(error);
    
))

登录/令牌创建页面

import * as express from "express";
// import * as jwt from 'jsonwebtoken';
import  authenticate  from 'passport';
import config from '../../config';


const router = express.Router();

router.post("/", authenticate('local'), async (req, res, next) => 
   try 
  //     const token = jwt.sign(
  //       userid: userFound.id, email: userFound.email, role: 1, 
  //       config.jwt.secret, expiresIn: '15d'
  //       );
  //     return res.json(token);
    res.json('plz');
   catch (err) 
    console.log(err);
    res.status(500).json( message: "My code login broke oops" );
  
);

export default router;

【问题讨论】:

尝试调试 passport 实际上是什么。看起来它是 undefined 而不是导入的模块。确保您没有在其他地方覆盖变量。 我是个菜鸟,你能解释一下你的意思吗?你是说console.log(passport)吗? console 不是最好的调试方法)) 但是这次没关系,尝试输出passwort 值。 嗯,当我注释掉问题代码时,这很有趣。我仍然得到同样的错误? Authenticate 现在被注释掉了,所以这看起来很奇怪。 检查错误的堆栈跟踪,您的错误来自其他地方 【参考方案1】:

唯一的问题是护照改变了如何导入身份验证

在登录/令牌认证页面

更改导入:

// import  authenticate  from 'passport'; to
import * as passport from 'passport';

// then anywhere you use authenticate just use passport.authenticate

【讨论】:

以上是关于无法运行护照登录策略。身份验证错误~ TypeError: Cannot read property 'authenticate' of undefined的主要内容,如果未能解决你的问题,请参考以下文章

护照 未知的身份验证策略“本地”、“脸书”、“谷歌”

未知的身份验证策略护照

Sails.js 与护照-http-bearer 身份验证不起作用

如何修复阻止注册用户登录的护照本地身份验证错误

使用带护照本地的护照Facebook策略时无法将用户序列化到会话中

NestJS - 错误:未知的身份验证策略“本地”