Articles of passport.js

使用护照和护照。validationAFTER路线申报

我正在处理的应用程序要求所有的validation代码都放在路由声明之后,而不是通过中间件将路由分隔到公共和私有路由中,并且调用passport.authenticate在login方法(代码A)的callback中,我需要加载所有的路线在configuration护照(代码B)之前。 我修改了这个例子: https : //github.com/rkusa/koa-passport-example来帮助解释我正在努力完成的事情。 上面的auth.js的精简版本如下: const passport = require('koa-passport') const fetchUser = (() => { // This is an example! Use password hashing in your const user = { id: 1, username: 'test', password: 'test' } return async function() { return user } })() passport.serializeUser(function(user, done) { console.log("serializing") done(null, user.id) }) passport.deserializeUser(async function(id, done) […]

ApplicationCredential实例无效。 详细信息:`provider`不能为空

我试图让Facebooklogin使用loopback-component-passport插件的loopback工作。 我已经在providers.json中configuration了应用程序的详细信息,现在如果我访问http:// localhost:3000 / auth / facebook我被redirect到Facebook,并且可以成功login。 但是,当我重新回到(/ auth / facebook / callback)时,我得到以下错误 – ValidationError 422 The 'ApplicationCredential' instance is not valid. Details: ValidationError 422 The 'ApplicationCredential' instance is not valid. Details: provider can't be blank (value: undefined). 我无法理解这个错误,因为提供程序文件是fb应用程序和path等的configuration,他们肯定是在工作。 这个插件没有很好的文档logging,所以我现在没有什么想法。

保存第一次login历史logging后,ExpressJS应用login失败

我使用PassportJS,MongoDB(Mongoose)和JSON Web令牌实现了一个ExpressJS应用程序。 在成功login路线实施 await user.insertLoginTime(); const token = user.generateJwt(); res.status(200).json({ token }); Mongoose模型方法'insertLoginTime' userSchema.methods.insertLoginTime = async function() { try { const presentTime = new Date().getTime(); await this.loginHistory.push(presentTime); await this.save(); return; } catch (error) { throw new Error(error); } }; 首先login成功,“邮递员”收到令牌,但在接下来的尝试中返回无效的密码错误。 删除'insertLoginTime'方法成功login多次尝试。 在“insertLoginTime”实现中是否有任何错误?

在不同情况下使用Passport.js更改并保存redirect

即时通讯编写一个网站使用快递和通行证进行身份validation(和mongodb作为数据库),我知道我如何可以authentication用户,以及如何限制某些页面,所以只有login的用户可以访问它们。 但我有一个问题,我无法find答案的任何地方: 如果用户尝试访问受限制的网页,并且通知用户未使用req.isAuthenticated()login,则会将用户redirect到login页面,然后当用户login时将用户redirect到他们的个人档案页面。 通常这很好,但在这种情况下,用户试图去到另一个不是个人资料页面的受限制页面。 当他/她尝试login时,如何将用户redirect到configuration文件页面,但当他/她尝试访问受限制的页面时,请求他/她login,然后将其redirect到他/她的页面试图访问?

尝试发出POST请求注册新用户时出现404错误

我正在尝试设置用户注册的function。 registry单使用Redux表单,身份validation由passport.js处理,我使用mongoDB(mLab)作为我的用户数据库。 当我尝试注册新用户时,出现以下错误: POST http://localhost:3000/signup 404 (Not Found) Uncaught (in promise) Error: Request failed with status code 404 动作/ index.js: export const createUser = values => async dispatch => { const res = await axios.post('/signup', values); dispatch({ type: CREATE_USER, payload: res }); }; authRoutes.js: const passport = require('passport'); module.exports = app => { app.post( '/signup', […]

将蒸汽authentication与前端框架集成

我目前正在开发一个应用程序与Node.js后端和vue.js作为前端框架。 作为login应用程序,我正在使用护照蒸汽,在后端完美地工作。 用户被redirect到前端以便login,后端处理login并返回req.user。 在后端检查user.isAuthenticated作品。 我的问题是如何将用户信息和用户身份validation的会话传递给前端客户端? 服务器代码: app.get('/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/' }), function(req, res) { res.redirect('http://localhost:8080/#/index'); }); app.get('/account', ensureAuthenticated, function(req, res){ res.send({user: req.user}); }); 当用户通过蒸汽authentication成功后,他被redirect到前端 – > localhost:8080 /#/ index,创build一个axios请求到localhost:/ 3001 /账户后端。 不幸的是前端请求没有被authentication。 有什么build议么 ? 非常感谢 !!

护照本地策略 – 不通过callback

我认为我制定了一个像以前一样的许多人的标准护照本地战略。 我已经parsing了表单,试过enctype = "multipart/urlencoded" ,大多数人提到的方式。 但是, passport.serializeUser仍然没有被触发。 现在,它可以redirect到主页,但是,在控制用户时,它是未定义的。 const env = require('dotenv').load(), config = require( __dirname + '/config.json' )[process.env.NODE_ENV], config_web = config.web, config_fb = config.fb, _WEB_PORT = config_web.port, _WEB_HOST = config_web.host, _FB_ID = config_fb.fid, _FB_SECRET = config_fb.secret; const express = require('express'), app = express(), compression = require('compression'), ejs = require('ejs'), cookieParser = require('cookie-parser'), fs = […]

Node.js Passport-Steam:无法发现OP端点URL

你可能会想,这是重复的,但不是。 我正在使用passport.js和Strategy passport-steam(我也试过passport-openid)。 一切工作正常localhost。 我被redirect到Steam并返回,但是当我上传应用程序到远程服务器时,我得到这个错误: Failed to discover OP endpoint URL InternalOpenIDError: Failed to discover OP endpoint URL at /home/cslore.com/nodejs/node_modules/passport-openid/lib/passport-openid/strategy.js:249:52 at /home/cslore.com/nodejs/node_modules/openid/openid.js:787:14 at /home/cslore.com/nodejs/node_modules/openid/openid.js:577:13 at /home/cslore.com/nodejs/node_modules/openid/openid.js:533:11 at Request._callback (/home/cslore.com/nodejs/node_modules/openid/openid.js:226:7) at self.callback (/home/cslore.com/nodejs/node_modules/request/request.js:188:22) at emitOne (events.js:116:13) at Request.emit (events.js:211:7) at Request.onRequestError (/home/cslore.com/nodejs/node_modules/request/request.js:884:8) at emitOne (events.js:116:13) 这不仅仅是Steam策略的问题,我尝试了每一个OAuth策略和一些不同的服务(谷歌等),我仍然得到这个错误。 问题在哪里? 为什么护照在本地主机上工作,但在服务器上是这个错误。

使用jsonwebtoken在nodejs和angular cli中获取未经授权的方法

我正在build设一个应用程序使用nodejs和angular-cli我正在使用JsonWebToken来validation用户帐户。 但它总是返回未经授权的401。 在这里我的代码: //validation码 router.post('/authenticate', (req, res, next) => { const username = req.body.username; const password = req.body.password; User.getUserByUsername(username, (err, user) => { if(err) throw err; if(!user){ return res.json({success: false, msg: 'User not found'}); } User.comparePassword(password, user.password, (err, isMatch) => { if(err) throw err; if(isMatch){ const token = jwt.sign(user.toJSON(), config.secret, { expiresIn: 604800 // 1 […]

如何testingpassport.js进行身份validation

我想testing我的passport.jsauthentication中间件: passport.authenticate('jwt', { session: false }, (err, user, info) => { if (err) return res.serverError(err) if (!user) return res.forbidden(info) req.user = user next() })(req, res, next) 中间件正在工作。 但是我不知道如何等待testing中的callback。 testing看起来像这样: const token = JwtAuthService.issue({ id: 1, email: 'test@email.com' }) const req = httpMocks.createRequest({ headers: { authorization: `bearer ${token}` } }) const res = { forbidden: sinon.spy() […]