Ich habe diese ausdrückliche Router für Benutzer, die in den Benutzer unter Verwendung des Token-System anmeldet:Node.js: Reisepass, zu überprüfen, ob der Benutzer bereits angemeldet hatte
var express = require('express');
var router = express.Router();
var passport = require('passport');
var User = require('../models/user');
var Verify = require('./verify');
router.post('/register', function(req, res) {
User.register(new User({ username : req.body.username }),
req.body.password, function(err, user) {
if (err) {
return res.status(500).json({err: err});
}
passport.authenticate('local')(req, res, function() {
return res.status(200).json({status: 'Registration Successful!'});
});
});
});
router.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.status(401).json({
err: info
});
}
req.logIn(user, function(err) {
if (err) {
return res.status(500).json({
err: 'Could not log in user'
});
}
var token = Verify.getToken(user);
res.status(200).json({
status: 'Login successful!',
success: true,
token: token
});
});
})(req,res,next);
});
module.exports = router;
Die Verify-Datei:
var User = require('../models/user');
var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
var config = require('../config.js');
exports.getToken = function (user) {
return jwt.sign(user, config.secretKey, {
expiresIn: 3600
});
};
exports.verifyOrdinaryUser = function (req, res, next) {
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
// decode token
if (token) {
// verifies secret and checks exp
jwt.verify(token, config.secretKey, function (err, decoded) {
if (err) {
var err = new Error('You are not authenticated!');
err.status = 401;
return next(err);
} else {
// if everything is good, save to request for use in other routes
req.decoded = decoded;
next();
}
});
} else {
// if there is no token
// return an error
var err = new Error('No token provided!');
err.status = 403;
return next(err);
}
};
Jetzt überprüfe ich, ob der Benutzer mit dem Erfolgsattribut angemeldet ist. Ich möchte, dass meine Route überprüft, ob der Benutzer bereits in der Login-Route angemeldet ist, bevor er die Pass-Authentifizierung durchläuft. Wie erreiche ich das?
Ähm, könnten Sie mir pls sagen, wie es in meinem Code passen würde? – QuikProBroNa
Genau so haben Sie schon die Funktion, das Token "verifyOrdinaryUser" richtig zu prüfen. Fügen Sie es Ihrer Route hinzu, so wie ich es Ihnen zuvor gezeigt habe –
Ähm, das ist nicht meine Frage. Ich möchte den Benutzer nur umleiten, wenn er bereits eingeloggt ist. Und wenn er es nicht getan hat, lass ihn zur Anmeldeseite durch. Das Hinzufügen dieses Anrufs zu meiner Route wird den Benutzer blockieren, wenn er nicht bereits angemeldet ist. Dies macht die Anmeldung praktisch unmöglich. – QuikProBroNa