【发布时间】:2018-03-08 23:40:57
【问题描述】:
我目前正在尝试学习 JWT 和 Passport for ExpressJS,但我似乎无法理解 Passport 的工作原理。
这是我最初在我的 ExpressJS 应用程序中所做的。
/api/loginPOSTAPI
- 接受用户名和密码
-
/api/login然后创建一个以用户名和密码作为有效负载的 JWT - 令牌然后响应客户端
我认为我的/api/login API 模拟了 JWT 硬身份验证一次并以令牌响应的一般思想。
另一方面,/api/test GET API
- 只有经过身份验证的用户才能访问
- 只返回“Hello World!”
有什么问题/s?
- 我的代码似乎没有验证令牌(我尝试将令牌放在 Authenticate 标头中。
- 向
/api/test请求时,我应该在我的请求中的哪个位置包含从/api/login返回的令牌?
现在是我的实际代码:
app.js
var express = require("express");
var bodyParser = require("body-parser");
var jwt = require("jsonwebtoken");
var passport = require("passport");
var LocalStrategy = require('passport-local').Strategy;
var mySecret = "mySecret";
var app = express();
var port = process.env.PORT || 3000;
app.use(bodyParser.json());
passport.use(new LocalStrategy(
function (token, done) {
var credentials = jwt.verify(token, mySecret);
if (credentials.username == "test" && credentials.password == "test") {
return done(null, credentials);
} else {
return done(null, false);
}
}
));
app.use(passport.initialize());
app.post("/api/login", function (request, response) {
var user = {
"username": request.body.username,
"password": request.body.password
};
response.send(jwt.sign(user, "mySecret"));
});
app.get("/api/test", passport.authenticate("local", {
"session": false
}), function (request, response) {
response.send("Hello World!");
});
app.listen(port, function () {
console.log("Listening on port: " + port);
});
【问题讨论】:
标签: express authentication token jwt passport.js