nodejs验证不起作用

时间:2016-07-29 06:54:33

标签: node.js authentication passport.js

我正在使用nodejs rest api并使用护照Basic Strategy进行身份验证。

当我通过身份验证发送请求时,服务器响应:

  

未知身份验证策略"基本"

这是我的BasicStrategy:

passport.use(new BasicStrategy(function (userName, password, callback) {
    User.findOne({username: userName}, function (err, user) {
        if (err) return callback(err);
        if (!user) return callback(null, false);
        user.checkPassword(password, function (err, isMatch) {
            if (err)return callback(err);
            if (!isMatch) return callback(null, false);
            return callback(null, user);
        })
    })
}));

这是我的路由器:

router.get("/",  passport.authenticate('basic', { session: false }), function (req, res) {
    bookModel.find(function (err, books) {
        if (!err) {
            return res.json(books);
        } else {
            res.statusCode = 500;
            log.error("Internal error (%d): %s", res.statusCode, err.message)
            return res.json({error: "Server error"});
        }
    });
});

我在java中的客户端okhttp:

private static void getBooks() throws IOException
    {
        Request request;
        Response response;
        String credentials = Credentials.basic("Axror", "topsecret");
        System.out.println(credentials);
        request = new Request.Builder()
            .url("http://localhost:1337/api/book/")
            .header("Authorization", credentials)
            .build();
        response = client.newCall(request).execute();
        System.out.println(response.body().string());
    }

2 个答案:

答案 0 :(得分:0)

您可能错过了初始化护照。你需要:

var app = express();
......
......
app.use(passport.initialize());

答案 1 :(得分:0)

你写过这个吗?

var BasicStrategy = require('passport-http').BasicStrategy;

这是使用BasicStrategy所必需的。