1
votes

Impossible de POST / utiliser express et body-parser

Cette question a déjà été posée mais les autres réponses ne m'ont pas aidé. J'ai un formulaire de connexion analysant le nom d'utilisateur et le mot de passe et l'authentifie à partir de la base de données et j'obtiens toujours une erreur Cannot POST / .

form(action='/', method='POST')        
     input(type='text',name='username',placeholder= 'Username', required='')
     input(type='password', name='password', placeholder='Password', required='')
     input(type='submit', value='Login')

fichier pug pour la connexion:

const express = require('express');
const app = express();

app.get('/', sessionChecker, (req, res) => {
    res.redirect('/login');
});
// route for user Login
app.route('/login')
    .get(sessionChecker, (req, res) => {
        res.render('login.pug');
    })
    .post((req, res) => {
    var username = req.body.username;
    var password = req.body.password;

    User.findOne({ where: { username: username } }).then(function (user) {
        if (!user) {
            res.redirect('/login');
        } else if (!user.validPassword(password)) {
            res.redirect('/login');
        } else {
            req.session.user = user.dataValues;
            res.redirect('/dashboard');
        }
    });
});

app.listen(3000, function () {
    console.log('express is running on port 3000');
});

Où ai-je commis une erreur?


0 commentaires

3 Réponses :


0
votes

Je ne vois pas où l'application express gère le message

Faites ceci:

app.post('/', function (req, res) {
  res.send('hello world')
})


1 commentaires

Ce n'est pas une solution, mais votre réponse m'a amené à résoudre le problème. :)



-1
votes

Je vous recommande d'utiliser l'authentification par jeton JWT, vous n'avez donc pas à vous soucier d'appeler d'abord «./get» sur / login, puis «./post» pour vérifier la session.

Avec JWT, vous pouvez token, vous pouvez simplement fournir une validation de token, qui redirigera automatiquement vers la page de connexion en cas d'expiration ou de validation du token lors de la redirection vers une nouvelle page.

De plus, si vous explorez plus sur JWT, vous trouverez que vous pouvez également transmettre des données dans un jeton, cela pourrait être des autorisations selon la connexion de l'utilisateur.


3 commentaires

JWT pour vous connecter sur le site? C'est une grande exagération. JWT est idéal pour communiquer avec l'API. Les stratégies Passort et Local sont meilleures.


@ bato3 J'ai répondu davantage en termes d'API et je me rends compte que Hossein avait besoin de plus d'aide pour l'authentification et que pour cela, la stratégie Passeport et Local est meilleure. Pour l'avenir, JWT est bon d'avoir avec passeport.


Je ne pense pas que JWT soit mauvais, seulement qu'il ne convient pas partout. De plus, vous avez besoin de .post / .get pour générer le jeton, et c'était le problème avec ce moment.



1
votes

Vous essayez de vous connecter sur la route / login , mais envoyez le message à / . Changez votre carlin en

form(action='/login', method='POST')  

BTW: Si vous utilisez Passport vous pouvez facilement ajouter d'autres méthodes de connexion: Google, FB, Twitter, ...


0 commentaires