簡體   English   中英

Passport + Express + Typescript req.user.email 未定義

[英]Passport + Express + Typescript req.user.email undefined

好了,我這有一個類似的問題這一個(我知道這是類似於另一個)。 但是req.user在我安裝@types/passport之前是未定義的。

現在我在 VS Code 中遇到了這個問題,盡管我的服務器上有我的會話實例。

問題

問題

實例化

// Middlewares
app.use(bodyParser.urlencoded({ extended: false }));
app.use(logger(process.env.NODE_ENV === 'development' ? 'dev' : 'combined'));
app.use(express.json());
app.use(session({
    secret: process.env.NODE_ENV === 'development' ? process.env.SESSION_SECRET : 'secret',
    resave: false,
    saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());

上面沒有錯誤。 因此......該應用程序實際上可以工作......但我在我的 VSC 文件中得到了這種“錯誤顏色”,這是很好的避免。 有什么建議?

以防萬一,我將包含整個路由器文件:

// POST - Crear usuario
router.post('/', async (req: Request, res: Response) => {
    const resultado: IResultado = {
        data: null,
        ok: false
    };
    const messages: Array<object> = [];
    const datos: IUsuario = req.body;

    // Validación de campos
    if (!validator.isEmail(datos.email)) {
        messages.push({ email: 'El correo electrónico es inválido'});
    }

    if (validator.isLength(datos.password, { max: 5})) {
        messages.push({ password: 'La contraseña debe tener como mínimo seis caracteres' });
    }

    if (!validator.isMobilePhone(datos.telefono, ['es-UY'])) {
        messages.push({ telefono: 'El número de teléfono es inválido' });
    }

    if (!empty(messages)) {
        resultado.message = 'No se pudo crear el usuario';
        resultado.messages = messages;
        return res.json(resultado);
    }

    datos.password = await bcrypt.hash(datos.password, 10);
    datos.fechaCreacion = Date.now();
    datos.fechaActualizacion = Date.now();

    if (req.user && req.user) {
        datos.propietario = req.user.email;
    }

    const ref: any = db.collection('usuarios').doc(datos.email);

    const doc = await ref.get();

    if (doc.exists) {
        // Usuario ya existe
        resultado.message = 'El correo electrónico ya está en uso';
        return res.json(resultado);
    }
    try {
        await ref.set(datos);
        delete datos.password;
        resultado.message = 'Usuario creado correctamente';
        resultado.data = datos;
        resultado.ok = true;
        return res.json(resultado);
    } catch(error) {
        resultado.message = 'No se pudo crear el usuario';
        resultado.error = error;
        console.log(error);
        return res.status(500).json(resultado);
    }
});

User界面( @types/passport模塊)

// tslint:disable-next-line:no-empty-interface
        interface AuthInfo {}
        // tslint:disable-next-line:no-empty-interface
        interface User {}

        interface Request {
            authInfo?: AuthInfo;
            user?: User;
...

您需要擴展Express.User類型:

declare global {
  namespace Express {
    interface User {
      email: string;
    }
  }
}

我認為您需要做的就是擴展基本的User類型界面。 這已經在GitHub 上問過了。

interface User extends SomeOtherUserTypeYouHaveDefined {
      email?: string;
      alsoAnyOtherPropertyYourCodeSetsOnUser: number;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM