Articles of passport.js

access_token不存在于passport-github2请求中

我已经通过我的Github帐户注册了一个OAuth应用程序。 我基本上试图授权我的node请求(通过发送access_token作为请求cookie的一部分),所以我可以访问另一台服务器上的几个API。 因此我使用github-passport2软件包。 我已经设置了Github策略等等,似乎都是根据文档。 stream程也运作良好。 我的问题 login到Github(授权)并redirect回到我的/auth/github/callback , 理想情况下应该被授权,并且在req应该有一个access_token 。 但我没有! 因此,我无法使用access_token来授权我未来的请求。 需要注意的是,当从浏览器/客户端(使用withCredentials: true参数)发起请求时,此access_token自动附加。 通过节点相同的access_token似乎不可检索。 passport.use(new GitHubStrategy({ clientID: GITHUB_CLIENT_ID, clientSecret: GITHUB_CLIENT_SECRET, callbackURL: "http://localhost:8080/auth/github/callback", }, function(accessToken, refreshToken, profile, done) { // asynchronous verification, for effect… process.nextTick(function () { return done(null, profile); }); } )); app.get('/auth/github', passport.authenticate('github', { scope: [ 'user:email' ] }), function(req, res){ // The […]

节点js重置用户的密码

早上好,我正在实现一个NodeJs函数来重置一个特定用户的密码。 我将所有用户保存在一个名为Account的本地MongoDb集合中,并使用以下模式: var Account = new Schema({ username: { type: String, trim: true, unique: true, index: true, lowercase: true, "default": "", validate: [validateLocalStrategyProperty, "Please fill in your email"], match: [/.+\@.+\..+/, "Please fill a valid email address"] }, password: { type: String, "default": "", validate: [validateLocalStrategyPassword, "Password should be longer"] }, role: { type: [ { […]

如何在nodejs-Express-passport应用程序中将令牌从服务器传递到客户端

我正在使用Nodejs + Express + passport.js。 我已经完成了authentication,并有令牌服务器端。 现在我想调用客户端JavaScript文件(填充HTML页面上的列表)的一些API,并希望在那里使用该标记。 什么最好的办法做到这一点? 我是否应该将令牌存储在用户对象中,并将其沿着路由传递,以便它可以在jade / ejs文件中使用并从那里使用它?

Node + Express + Passport + Mongoose:req.user未定义

login时,定义了req.user,但在其他path上,req.user未定义。 也许我做错了什么,我跑出了想法。 也绝望从未被称为 server.js: var LocalStrategy = require('passport-local').Strategy; const User = require('./models/user'); const app = express(); mongoose.Promise = global.Promise; const mongoDB = 'mongodb://mlab.com:21494/tester'; mongoose.connect(mongoDB, { useMongoClient: true }) const db = mongoose.connection; db.on('error', console.error.bind(console, 'MongoDB connection error:')); app.use(function (req, res, next) { res.header('Access-Control-Allow-Credentials', 'true'); res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Authorization'); if […]

为每个用户使用mongodb和mongoose分开数据库

我正在使用MongoDB和mongoose来处理我的数据库需求。 我目前有这样的: mongoose.connect(secrets.db, {server:{poolSize: 1}}); mongoose.connection.on('error', function() { console.error('MongoDB Connection Error. Make sure MongoDB is running.'); }); 作为我的mongo连接。 我想改变这一点,以便每个login(使用护照)的用户都有自己的数据库。 所以当我show dbs我想看到user_ObjectID_database_name如何修改我的代码来获得这个结果? 我想要它,因为我相信它从我的研究中更安全。 我不能find任何好的指导如何做到这一点。 我相信他们是存在的,但是我已经花了4个小时,甚至连一个我能猜到的半好的也没有运气。 目前我只有一个users集合。 这是我当前的代码,当用户点击/signup为POST请求时运行。 exports.postSignup = function(req, res, next){ req.assert('email', 'Please sign up with a valid email.').isEmail(); req.assert('password', 'Password must be at least 6 characters long').len(6); var errors = req.validationErrors(); if (errors) { […]

创build帐户电子邮件validation无效

我想这样做,当用户注册我的网站,他们得到一封电子邮件,说他们需要validation他们的电子邮件使用该网站。 它目前发送带有令牌的电子邮件,但是当我去到确认链接时,它失败, status 404 。 路线 app.post('/confirmation/:token', users.confirmationPost); 需要控制器 var users = require('../controllers/users-controller'); confirmationPost exports.confirmationPost = function (req, res, next) { req.assert('email', 'Email is not valid').isEmail(); req.assert('email', 'Email cannot be blank').notEmpty(); req.assert('token', 'Token cannot be blank').notEmpty(); req.sanitize('email').normalizeEmail({ remove_dots: false }); // Check for validation errors var errors = req.validationErrors(); if (errors) return res.status(400).send(errors); // Find […]

PassportJs的passport.session()与file upload冲突 – 不会写入文件

好吧,把我的头靠在墙上。 我只是从everyauth切换到passportjs,一切都很好,除了我的Valumsfile upload器的实现。 你可以在https://gist.github.com/4066155看到我的fileuploader代码的要点 我的app.configureexpression如下所示: app.configure( function () { app.use(express.methodOverride()); app.use(express.static(__dirname + '/public')); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.set('view options', { layout: false }); app.use(passport.initialize()); app.use(passport.session()); }); 奇怪的是,如果我注释掉app.use(passport.session()); – file upload似乎工作正常。 passport.initialize可以保留,因为它不会造成任何问题。 如果我在代码中保留使用passport.session,上传调用就会通过,它实际上会在我的tmp目录中创build一个临时文件,但它保持为零字节。 服务器从不响应Web客户端(没有callback),文件从来没有真正由fs写入。 即使是一个正确的方向指针可能是非常有帮助的。 如果你需要更多的上下文,让我知道。 谢谢。 更新: 如果有帮助的话,我会分析reqvariables来查看passport.session在调用passport.session时没有被调用的差异。 第一个差异是passport.session没有被调用,第二个是被调用的。 URL: http : //diffchecker.com/Xk8g434Q – 第469行很有意思,它显示了被绑定的事件,然后在第二块文本中,事件只是{}(空)。

在手动更改路由后,mediator.user会丢失

我正在用护照本地身份validation构build一个单页面应用程序。 用户在app.post "/login"进行身份validation并返回。返回app.post "/login"后,我将其保存在Chaplin.mediator.user (如在facebook-example中所见)。 只要我不手动更改URL,一切正常,但是当我更改URL并按回车键时,应用程序会被重新加载,但使用不同的路由 – >前端没有用户。 我现在正在做的是每次我手动改变路由,我发送一个请求到服务器,并要求req.user用户。 收到用户后,应用程序继续其工作stream程。 它的工作原理,但我不认为这是如此。 如果您不等待响应,则最终没有用户对象,尽pipe您已login。 我怎么解决这个问题? 编辑:我结束了保存用户在一个单独的cookie。 这是我如何保存用户: $.cookie.json = true; $.cookie 'user', user.toJSON() 这是我加载页面后如何提取用户: userCookie = $.cookie 'user' if userCookie? mediator.user = new Model JSON.parse userCookie 你需要使用jquery-cookie插件来使其工作。 如果用户注销,请不要忘记删除Cookie。 当然,我对其他想法仍然持开放态度。

初学者node.js应用程序使用护照+ googleapis

我正在与Node.js一起尝试使用Google书籍API和护照以及Google策略进行身份validation来制作图书库应用程序。 到目前为止,我可以validation和访问API。 现在可能是一个愚蠢的问题,如何获取数据回收使用我的collections视图? 我可以在身份validation后访问Google数据,然后我需要redirect到集合,但是如何将这些数据构build到新视图中? app.get('/auth/google', passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/books', 'https://www.googleapis.com/auth/userinfo.profile'] })); app.get('/auth/google/callback', passport.authenticate('google', {failureRedirect: '/'}), function (req, res) { // Successful authentication, get data and redirect to user collection googleapis.discover('books', 'v1').execute(function (err, client) { oath2Client.credentials = { access_token: req.user.accessToken, refresh_token: req.user.refreshToken }; var req1 = client.books.mylibrary.bookshelves.list().withAuthClient(oath2Client); req1.execute(function (err, bookshelves) {}); }); res.redirect('/collection'); }); app.get('/collection', routes.collection, […]

Sails.js与护照http承载身份validation不起作用

我使用护照(本地和持证人策略)多种策略。 本地策略的login工作。 我们在login后生成一个令牌,令牌存储在redis中。 在初始login后,只要在redis中find令牌,我就想使用不带会话的承载authentication。 如果我发送正确的令牌,我可以查询redis和获取用户数据,但节点仍然发送403响应,而不是我期望的200状态码。 如果在Redis中找不到标记,则导致以下错误导致崩溃: /workspace/rs-api-sails/node_modules/redis/index.js:587 throw err; ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (http.js:691:11) at ServerResponse.res.setHeader (/workspace/rs-api-sails/node_modules/sails/node_modules/express/node_modules/connect/lib/patch.js:59:22) at allFailed (/workspace/rs-api-sails/node_modules/passport/lib/passport/middleware/authenticate.js:153:13) at attempt (/workspace/rs-api-sails/node_modules/passport/lib/passport/middleware/authenticate.js:232:28) at Context.delegate.fail (/workspace/rs-api-sails/node_modules/passport/lib/passport/middleware/authenticate.js:227:9) at Context.actions.fail (/workspace/rs-api-sails/node_modules/passport/lib/passport/context/http/actions.js:35:22) at verified (/workspace/rs-api-sails/node_modules/passport-http-bearer/lib/strategy.js:125:19) at /workspace/rs-api-sails/config/bootstrap.js:40:18 at try_callback (/workspace/rs-api-sails/node_modules/redis/index.js:580:9) at RedisClient.return_reply (/workspace/rs-api-sails/node_modules/redis/index.js:670:13) 10 Dec 13:25:15 – [nodemon] app crashed – […]