0
私は現在、ユーザー認証を必要とするアプリケーションをプログラミングしています。アプリケーションにログインすると、ノードサーバーはユーザーをメインページにリダイレクトする必要があります。残念ながら、私はそれをしようとするときに問題に直面しています。ここでNode.js res.redirectは機能しません
は、Node.jsの中に私のコードです:
//import necessary modules
var path = require("path");
var http = require("http");
var express = require("express");
var session = require("express-session");
var port = 8080;
var app = express();
var conString = "postgres://postgres:[email protected]:5432/db_invoice_kuga";
/**
* Middleware components.
* The session middleware is used to create sessions for
* user authentication.
* The static middleware is used to serve
* the static file in the frontend folder.
*/
//use sessions for authentication
app.use(session({
secret: "2C44-4D44-WppQ38S",
resave: true,
saveUninitialized: true
}));
//check authentication
app.use(function(req, res, next) {
if(req.session && req.session.user) {
next();
} else {
if(req.url.indexOf("/login/") === -1 && req.url.indexOf("/loginPage") === -1) {
res.redirect("/loginPage");
} else {
next();
}
}
});
//static middleware
app.use(express.static(__dirname + "/frontend"));
/**
* Routes define the endpoints for the application.
* There is a specific file for customer routes, invoice routes, ...
*/
//include routes
require("./routes/routesCustomer.js")(app, conString);
//login and logout routes
app.get("/loginPage", function(req, res) {
res.sendFile(path.join(__dirname, "frontend", "login.html"));
});
app.get("/", function(req, res) {
res.sendFile(path.join(__dirname, "frontend", "index.html"));
});
/**
* Logs the user in.
* @name /login/:username/:password
* @param username (obligatory)
* @param password (obligatory)
*/
app.get("/login/:username/:password", function(req, res) {
var username = req.params.username;
var password = req.params.password;
if(username === "Daniel" && password === "test") {
req.session.user = "Daniel";
res.redirect("/");
} else {
res.status(400).json({
"loggedin": false
});
}
});
/**
* Logs the user out.
* @name /logout
*/
app.get("/logout", function(req, res) {
req.session.destroy();
res.redirect("/loginPage");
});
/**
* Bind the server to the port and
* start the application.
*/
//create the server and bind it to the port
http.createServer(app).listen(port, function() {
console.log("Server listening on port " + port);
});
私の問題は、 "/ /ログイン:ユーザー名/:パスワード" ルートです。そこには "res.redirect( '/')"が機能しません。 redirect()は他のルートでうまく動作しますが...
何が間違っている可能性がありますか?おそらく、ユーザー認証を行うためのよりよい方法もあります。私は提案をありがとう:)
ありがとうございます。 ダニエル
「機能しない」とはどういう意味ですか?何が起こるのですか?エラー?ユーザーは '/ loginPage'を終了します。クライアントはサーバーから応答を受け取りますか?いくつかの簡単なデバッグ手順を最初に実行する必要があります。 – jfriend00
偶然、AJAXコール経由で 'login'ルートを利用していますか? - うーん、前に進み、それを仮定してください。あなたはAJAXコールからサーバリダイレクトを行うことはできません - クライアント上で行わなければなりません。 – tymeJV
ありがとうございました。 –