【问题标题】:Why is passport.serializeUser not a function?为什么 passport.serializeUser 不是函数?
【发布时间】:2021-01-18 13:16:38
【问题描述】:

我已经搜索了将近一个小时,但我找不到我的代码问题,我也无法在 inter 上找到解决方案,我什至在 Discord 上的其他编码社区寻求帮助,但没有人知道我为什么会出现这样的错误。

我一直在尝试按照本教程 https://mherman.org/blog/node-passport-and-postgres/#objectives 了解护照包 - https://www.npmjs.com/package/passport

我有以下文件

userController.ts

import { Request, Response } from 'express';
import * as fs from 'fs';
import * as Path from 'path';
import passport = require('../../auth/local');



export const userLogIn = async (req: Request, res: Response) => {
    
    passport.default.authenticate('local', (err, user, info) => {
        if (err) { res.status(500).send('error'); }
        if (!user) { res.status(404).send('User not found!'); }
        if (user)
        {
            req.logIn(user, function (err) {
                if (err) { res.status(500).send('error'); }
                res.status(200).send('success!');
            });
        }
    });
    return;
}

local.ts

import * as passport from 'passport';
import passport_local = require('passport-local');
const LocalStrategy = passport_local.Strategy;

import init = require('../passport');
import { knex } from '../knex/knex';
import * as bcrypt from 'bcrypt';

const options = {
    usernameField: 'email',
    passwordField: 'password'
};

init.default();

export default passport.use(new LocalStrategy(options, (username, password, done) => {
    knex('accounts').where({userEmail: username}).first()
    .then((user) => {
        if (!user) return done(null, false)
        if(!bcrypt.compareSync(password, user.userPassword)) {
            return done(null, false);
        }
        else {
            return done(null, user);
        }
    })
    .catch((err) => { return done(err); });
}));

还有我有问题的文件

passport.ts

import * as passport from 'passport';
import { knex } from './knex/knex';

export default function(){
    passport.serializeUser<any, any>(function(user, done) {
        done(null, user.id);
    });

    passport.deserializeUser((id, done) => {
        knex('accounts').where({userId: id}).first()
        .then((user) => { done(null, user) })
        .catch((err) => { done(err, null) });
    });
}

我的错误:

TypeError: passport.serializeUser 不是函数

我已经为护照安装和导入了@types,如果我将鼠标悬停在护照的导入上,它会显示它是从@types 文件夹导入的。

我不知道是什么原因造成的。

是的,一个函数带有“功能”,另一个带有箭头,因为我尝试更改它以寻找解决方案,但似乎没有任何效果。

【问题讨论】:

  • passport.serializeUser(function(user, done) {done(null, user.id); }); ,这在没有 '' 的情况下有效吗? PS:我不使用打字稿
  • @Mendes 在添加任何之前我遇到了同样的错误,所以是的,任何任何都没有任何效果

标签: node.js typescript passport.js


【解决方案1】:

我猜你是用错误的方式导入它。

import passport from "passport"; - 应该根据代码源工作

【讨论】:

  • 我认为所有的导入都在做同样的事情,但语法不同,现在真的可以了,谢谢:D
猜你喜欢
  • 2014-09-13
  • 2021-09-09
  • 2019-10-12
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多