[英]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.