angularjs – 当使用passport-http基本护照本地组合时,如何防止w
发布时间:2020-12-17 18:04:26 所属栏目:安全 来源:网络整理
导读:嗨,我想在我的应用程序中支持formbased身份验证和http基本身份验证.一切都按预期工作,除非我使用基于表单的auth通过 angularjs与错误的凭据. 浏览器不显示我的角度代码处理401,而是显示由WWW-Authenticate标头引起的BASIC auth对话框. 如何在使用本地策略时
嗨,我想在我的应用程序中支持formbased身份验证和http基本身份验证.一切都按预期工作,除非我使用基于表单的auth通过
angularjs与错误的凭据.
浏览器不显示我的角度代码处理401,而是显示由WWW-Authenticate标头引起的BASIC auth对话框. 如何在使用本地策略时阻止添加标头? 我在基于Express的应用程序中使用以下路由. api.post('/authenticate',passport.authenticate(['local','basic'],{ session: false }),function (req,res) { 这将在该URL上启用两种身份验证方法.我再说一遍,当我使用formbased使用错误的凭据时,它会向我显示基本的auth对话框(我不希望这样). 以下是我如何注册策略. 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支持多种身份验证方法? 为了完整性,这是验证我的角度代码…… 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,{ 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) } } 或者可能新的错误(< message>)也可以正常使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |