Ich versuche, Authentifizierung für meine Knoten js-Anwendung bereitzustellen.Für, dass ich Express-Sitzung npm.Basisch was ich versuchte, wenn ich wenn meine Anmeldeinformationen in meiner/Login-Seite korrekt sind. Es sollte die Sitzung starten und mich zu/admin page.So dass/admin wird für einige Zeit in anderen Tabs direkt zugänglich sein. Und wenn ich auf Abmelden Button klicke, sollte es mich auf die Hauptseite bringen und Sitzung sollte abgebrochen werden und/Admin-Seite sollte nicht direkt zugänglich sein und Redirect zu /Loginseite.Express-Sitzung funktioniert nicht mit "Fehler: Kann Header nicht festlegen, nachdem sie gesendet werden."
Ich habe versucht, die Sitzung zu starten, wenn die Anmeldung erfolgreich ist, aber es gibt mir den Fehler: Kann Header nicht festlegen, nachdem sie gesendet werden.
app.js
var session = require('express-session');
app.use(session({
secret: 'securedsession',
resave: false,
saveUninitialized: true,
cookie: {
secure: true,
resave: true,
saveUninitialized: true,
maxAge: new Date(Date.now() + 3600000)
}
}));
var auth = function(req, res, next) {
if (req.session && req.session.user === "admin" && req.session.admin)
return next();
else
return res.sendStatus(401);
};
app.post('/verifylogin', function(req, res) {
var username = req.headers.uname;
var password = req.headers.pwd;
if (!username || !password) {
res.send('login failed');
} else if (username === "admin" || password === "adminnn") {
req.session.user = "admin";
req.session.admin = true;
res.contentType('application/json');
var data = JSON.stringify('/admin');
res.header('Content-Length', data.length);
res.send(data);
}
app.get('/logout', function(req, res) {
req.session.destroy();
res.send("logout success!");
});
app.get('/admin', auth, function(req, res, next) {
res.sendFile(__dirname + '/public/views/admin.html');
});
login.html
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
function login() {
var uname = document.getElementById('uname').value;
var pwd = document.getElementById('pwd').value;
$.ajax({
url: '/verifylogin',
type: "POST",
headers: {
"uname": uname,
"pwd": pwd
},
success: function(data) {
window.location = data;
}
});
}
</script>
<h1>Login</h1>
<p>
<label class="control-label">Username</label>
<input type="text" placeholder="Username" id="uname" />
</p>
<p>
<label class="control-label">Password</label>
<input type="password" placeholder="Password" id="pwd" /><br/>
</p>
<p>
<button type="submit" class="btn btn-primary" onclick="login()">Login</button>
</p>
Kann mir jemand helfen, den Fehler heraus, dass ich wenn überhaupt hier und wie zu tun, dies zu beheben und starten Sie die Sitzung
********* bearbeitet
neuesten Code nach den Vorschlägen, auch die Kredits richtig sind, es ist mir nicht autorisierte Umleitung statt,/admin .can u haben einen Blick
var app = express();
var d = new Date();
app.use(methodOverride());
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(session({
secret: 'securedsession',
resave: false,
saveUninitialized: true,
cookie: {
secure: true,
resave: true,
saveUninitialized: true,
maxAge: d.getTime() + 10
}
}));
app.set('view engine', 'pug');
app.post('/verifylogin', function(req, res) {
var username = req.body.uname;
var password = req.body.pwd;
var uname = "admin";
var pwd = "[email protected]";
if (uname == username && pwd == password) {
console.log("success");
req.session.user = "admin";
req.session.admin = true;
req.session.save();
console.log("resdasdasda", req.session);
res.contentType('application/json');
var data = JSON.stringify('/admin');
res.header('Content-Length', data.length);
res.send(data);
} else {
console.log("fail");
res.send("Bad luck");
}
});
var auth = function(req, res, next) {
if (req.session && req.session.user === "admin" && req.session.admin)
return next();
else
return res.sendStatus(401);
};
app.get('/', function(req, res, next) {
res.sendFile(path.join(__dirname + '/public/views/home.html'));
});
app.get('/login', function(req, res, next) {
res.sendFile(__dirname + '/public/views/login.html');
});
app.get('/admin', auth, function(req, res, next) {
res.sendFile(__dirname + '/public/views/admin.html');
});
app.get('/logout', function(req, res) {
req.session.destroy();
res.send("logout success!");
});
module.exports = app;
html
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
function login() {
var uname = document.getElementById('uname').value;
var pwd = document.getElementById('pwd').value;
$.ajax({
url : '/verifylogin',
type : "POST",
data : {
"uname":uname,
"pwd" :pwd
},
success: function(data) {
window.location = data;
}
});
}
</script>
<h1>Login</h1>
<p>
<label class="control-label">Username</label>
<input type="text" placeholder="Username" id="uname" />
</p>
<p>
<label class="control-label">Password</label>
<input type="password" placeholder="Password" id="pwd" /><br/>
</p>
<p>
<button type="submit" class="btn btn-primary" onclick="login()">Login</button>
</p>
Können Sie bitte den Code in Ihrer Frage richtig einrücken. Es ist wirklich nicht lesbar, wie es ist. – jfriend00
@ jfriend00 Ive eingerückt richtig.Kannst du einen Blick, warum es mich nicht zu/admin – user7350714