Tag: passport.js

如何使用使用Passport.js的远程NodeJS API对客户端Web应用程序进行身份validation和授权

如下图所示,我有一个运行在端口为3001的服务器上的独立API项目,并且我有一个运行在端口为3002的服务器上的Web应用程序。 接口3001上的API具有Web应用程序(和移动应用程序)获取和放置数据所需的所有API路由,包括身份validationAPI(使用passport-local和passport-jwt )。 在项目的API方面,我也处理了用户angular色授权,每个路由都有可以访问API的angular色列表。 示例路线 todoRoutes.get('/', requireAuth, AuthController.roleAuth(['user','editor','admin']), TodoController.getTodos); angular色授权API方法在端口3001 exports.roleAuth = function(roles){ return function(req, res, next){ var user = req.user; User.findById(user._id, function(err, foundUser){ if(err){ res.status(422).json({error: 'No user found.'}); return next(err); } if(roles.indexOf(foundUser.role) > -1){ return next(); } res.status(401).json({error: 'You are not authorized to view this content'}); return next('Unauthorized'); }); } } login成功后响应json是这样的 { "token": […]

LocalStrategy不是一个构造函数

我使用passport.js进行身份validation ,并尝试设置本地策略。 但是,每当我运行我的代码时,我得到一个错误,说localStrategy不是一个构造函数。 代码 : // config/passport.js // load all the things we need var localStrategy = require('passport-local'); // load up the user model var User = require('../app/models/user'); // expose this function to our app using module.exports module.exports = function(passport) { // ========================================================================= // passport session setup ================================================== // ========================================================================= // required for persistent login […]

护照 – 无法读取属性“isAuthenticated”

我正试图解决以下错误: /home/ubuntu/workspace/src/util/utils.js:2 if (req.isAuthenticated()) { ^ TypeError: Cannot read property 'isAuthenticated' of undefined at Object.isLogged (/home/ubuntu/workspace/src/util/utils.js:2:11) at Object.<anonymous> (/home/ubuntu/workspace/src/routes/index.js:6:23) 我在我的应用程序中使用以下护照: require('dotenv').config() const express = require('express') //… const session = require('express-session') const passport = require('passport') // configure passport require('./config/passport')(passport) const auth = require('./routes/auth') const index = require('./routes/index') const app = express() // … app.use( session({ secret: […]

passport.js – 使用本地通行证从MongoDBvalidation用户

我在MongoDB中有一个简单的用户集合。 我用户mongo本地驱动程序。 { "email": "johndow@example.com", "password": "123456", "_id": { "$oid": "50658c835b821298d3000001" } } 当我通过对电子邮件进行用户身份validation:通过,我重新写了默认的通行证本地函数findByUsername这个: function findByEmail(email, fn) { db.collection("users", function(err, collection) { collection.find({}, {}, function(err, users) { users.each(function(err, user) { if (user.email === email) { return fn(null, user); } }); return fn(null, null); }); }); } 只需要获取所有的用户表单数据库,并检查 – 如果user.email ==提供了电子邮件,则返回用户对象。 我使用MongoDB的_id参数作为用户的id,这就是为什么我修改了这两个函数: passport.serializeUser(function(user, done) { done(null, […]

如何访问node.js护照身份validation的POST数据?

我试图在提交护照login表单后访问POST参数。 我的表格如下: <form method="post"> <input name="username"> <input name="password"> <input type="checkbox" name="remember" value="1"> <input type="submit"> </form> (工作)快速路线/callback: app.post( '/login', passport.authenticate('local', { failureRedirect: '/login', failureFlash: true, badRequestMessage: 'Please enter your account credentials to login.' }), function(req, res) { console.log(req.param('remember')); if(req.isAuthenticated(req, res)) { res.redirect('/dashboard'); } else { var errors = req.flash('error'); if(errors) { assign['errors'] = errors; } res.render('login.html', […]

用户login页面刷新不适用于Passport js

我正在使用下面的代码来validation用户与护照js /** * Module dependencies. */ var express = require('express') , routes = require('./routes') , http = require('http') , path = require('path'); var app = express(); var config = require('./config'); var User = require('./models/user'); var passport = require('passport'), FacebookStrategy = require('passport-facebook').Strategy; //setting up passport passport.serializeUser(function(user, done){ done(null, user.id); }); passport.deserializeUser(function(id, done){ User.findById(id, function(err, user){ done(err, […]

为什么我的req.user在加载时始终为空?

我已经挣扎了好几天,取得了一些很好的进展,但是我不能让我的课程工作得很好。 我已经成功地使用Passport来与Facebook进行身份validation。 当我用FBbutton点击我的login时,会话完全加载,我有我的req.user对象都准备好去,但在我看来,我应该只需要做一次。 我知道护照保存了一个cookie。 我已经看了看,看到工作。 我试图检测用户是否已经login在我的索引页的负载,但是当我加载页面的req.user对象始终为空,我的passport.deserializeUser方法永远不会被调用来加载它(如果我点击login到FBbutton它确实被调用)。 所以我的问题是,你如何告诉护照页面加载检查cookie和加载用户会话,如果有的话? 更新 – 好的,所以对于那些稍后发现这个问题的人,我只想回顾一下我在这里学到的东西(感谢那些评论过的人)。 希望这会帮助其他人。 我习惯了不pipe服务器如何生存的.NET cookies。 Node.js和护照不在同一个前提下工作。 默认情况下,node.js使用内存来保持会话。 当您closuresterminal/命令行中的节点(每次更改服务器代码时都必须执行此操作)时,内存存储cookie信息将被重置,因此任何与其关联的cookie都是无意义的。 为了解决这个问题,我安装了Redis( http://cook.coredump.me/post/18886668039/brew-install-redis ),并把它作为我的商店( http://www.hacksparrow.com/use-redisstore-而不是memorystore-express-js-in-production.html )。 这将在Azure上工作,这是我计划的生产服务器,因此一切正常。 好的,这是一些代码。 我不确定放什么部分… 这是server.js /** * Module dependencies. */ var express = require('express') , app = express() , partials = require('express-partials') , http = require('http') , server = http.createServer(app) , io = require('socket.io').listen(server) , […]

如何使用访问令牌在通过twitter.js护照login后validation用户

我需要在我的node.js应用程序上构build一个基于令牌的身份validation,用户可以使用他的Facebook或Twitter凭据login我的应用程序,并使用访问令牌获取资源。 这个postbuild议一旦通过Facebook或Twitter或其他authentication,每个请求使用访问令牌,并不需要会话 例如 GET / api / v1 / somefunction?token ='abcedf' 客户端从响应中获取访问令牌。 客户端使用token参数调用一些服务器API。 所以下面的代码是通过twitter授权用户,如果我的应用没有find我的用户信息,那么把用户信息存储到数据库中。 passport.use(new TwitterStrategy({ consumerKey: config.twitter.clientID, consumerSecret: config.twitter.clientSecret, callbackURL: config.twitter.callbackURL }, function(token, tokenSecret, profile, done) { console.log('TwitterStrategy /auth/twitter………….',profile.id, profile.displayName, profile.username, profile.emails[0], profile._json.avatar_url); userModel.findUserByQuery({ 'social.twitter.id': profile.id }, function (err, user) { if (!user) { console.log('twitter user not found'.red); userModel.createNewUser( { username:profile.username, email:profile.emails[0].value, img:profile._json.avatar_url, fullname:profile.displayName, […]

如何从passportjs中的刷新令牌获取新的Google oauth访问令牌

似乎有关于如何从刷新令牌获取访问令牌的一些冲突的build议: 这回答说,passportjs不涉及刷新访问令牌,它应该通过cron作业完成: 刷新Passport.js中的令牌 这回答说:“不需要任何cron作业…当用户使用已过期的访问令牌从API请求数据,这应该会导致您的框架失败,更新,然后重试。 OAuth 2.0 – 访问令牌何时应该刷新令牌? 确保我们始终向Google提供有效的访问令牌的最简单方法是什么? 现在,我们只是将刷新令牌存储在数据库中,从不使用它,每当访问令牌过期时,都会强制用户通过“允许/拒绝权限”stream。

使用passport.js本地策略(使用用户名/密码)没有express.js

我想了解passport.js如何使用用户名作为密码。 文档示例使用express.js。 有没有人使用passport.js没有使用任何其他图书馆为他们的应用程序/网站? 我一直在试图寻找一个非常“勉强”的教程。 我设法find的一切都是使用express.js的例子。 任何示例或示例的链接将非常有帮助。 我正在尝试将我的node.js服务器的使用限制为一个pipe理员用户名/密码。 如果没有护照这样做的任何build议也会有所帮助!