gpt4 book ai didi

angularjs - 使用 passport-http Basic + passport-local 组合时如何防止 www-authenticate header

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:29 24 4
gpt4 key购买 nike

您好,我想在我的应用程序中同时支持基于表单的身份验证和 http 基本身份验证。一切都按预期工作,除非我通过带有错误凭据的 angularjs 使用基于表单的身份验证。

浏览器没有让我的 Angular 代码处理 401,而是显示了由 WWW-Authenticate header 引起的 BASIC 身份验证对话框。

当使用本地策略时,如何防止添加该 header ?或者我如何以不同的方式支持这两种机制?

我在基于 express 的应用中使用以下路线。

api.post('/authenticate', passport.authenticate(['local', 'basic'], { session: false }), function (req, res) {

这会在该 url 上启用两种身份验证方法。我再说一遍,当我使用 formbased 使用错误的凭据时,它会显示基本的身份验证对话框(我不想要那个)。

以下是我注册策略的方法。

passport.use(new BasicStrategy({ realm: 'Authentication failed. Wrong username or password.'}, verifyLocalUser));
passport.use(new LocalStrategy(verifyLocalUser));

这就是我的 verifyUser 方法的样子...

var verifyLocalUser = function (username, password, next) {
User.findOne({
username: username
}).select('fullname admin username password').exec(function (err, user) {
if (err) {
return next(err);
}

if (user && user.comparePasswords(password)) {
return next(null, user);
} else {
next(null, false, { message: 'Authentication failed. Wrong username or password.' });
}
});
}

有谁知道如何使用 passport.js 支持多种身份验证方法?

为了完整起见,这是对我进行身份验证的 Angular 代码...

authFactory.signIn = function (username, password) {
return $http.post('/api/authenticate', {
username: username,
password: password
}).then(function (res) {
AuthToken.setToken(res.data.token);
return res.data;
}, function (res) {
console.warn(res);
});
};

最佳答案

而不是这个:

next(null, false, { message: 'Authentication failed. Wrong username or password.' });

你可以使用这个:

cb(new YourCustomError())

“YourCustomError”可以有一条消息,对我来说我的“YourCustomError”看起来像:

class HttpError extends Error {
constructor (msg = 'Invalid Request', status = 400) {
super(msg)
this.status = status
}
}

class Forbidden extends HttpError {
constructor (msg = 'Forbidden') {
super(msg, 403)
}
}

或者可能是new Error(<message>)也会为你正常工作

关于angularjs - 使用 passport-http Basic + passport-local 组合时如何防止 www-authenticate header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com