Tag: passport.js

Express + PassportJs:为什么我们需要在passport策略中用process.nextTick()延迟执行方法?

我正在使用护照本地策略进行用户注册。 我碰到这个代码示例,其中作者正在使用process.nextTick来延迟Passport LocalStrategycallback中的方法的执行。 我知道我们可以使用process.nextTick延迟某个方法的执行,并在事件循环的下一个记号中执行它,但是能否解释为什么我们需要在这个例子中使用它? passport.use('signup', new LocalStrategy({ usernameField: 'email', passReqToCallback: true // allows us to pass back the entire request to the callback }, function(req, email, password, done) { findOrCreateUser = function() { if (isValidEmail(email)) { // find a user in Mongo with provided email User.findOne({ 'email': email }, function(err, user) { // In case […]

Node.js:Passport,检查用户是否已经login

对于使用令牌系统login用户的用户,我有这个快速路由器: var express = require('express'); var router = express.Router(); var passport = require('passport'); var User = require('../models/user'); var Verify = require('./verify'); router.post('/register', function(req, res) { User.register(new User({ username : req.body.username }), req.body.password, function(err, user) { if (err) { return res.status(500).json({err: err}); } passport.authenticate('local')(req, res, function () { return res.status(200).json({status: 'Registration Successful!'}); }); }); }); router.post('/login', […]

无法读取null + passport.js的属性“body”

我试图在Node / Express / Sequelize应用程序中实现passport.js。 我试图尽可能忠实于官方文档和Scotch.io教程 ,目前在我的脚手架上有以下相关的代码段: app.js const express = require('express'); const http = require('http'); const https = require('https'); const sequelize = require('sequelize'); const db = require('./config/sequelize'); const config = require('./config/config'); const passport = require('./config/passport'); const app = express(); const port = 3000; app.use(passport.initialize()); app.use(passport.session()); app.set('view engine', 'ejs'); app.listen(port); app.post('/signup', passport.authenticate('local', function(req, res, next, […]

PassportJS – 是否可以改变req.user为另一个用户?

在我的应用程序中,我已经实现了更改用户权限,级别等function。如果更新我自己的权限,我可以立即看到更改,因为我可以通过req.login()更新req.user对象req.login() 。 问题是,当我更新另一个用户权限时,它在数据库中更新就好了,但是用户将不得不重新login以查看他们的权限更改,因为req.user仍然认为他们没有权限。 这很好,如果他们没有login当然,但如果他们是,我想这个变化立即反映给他们,如果可能的话。 所以我想知道是否有方法来更新另一个用户req.user对象,以便他们可以立即看到他们的权限变化,而不必注销和返回? 或者返回之前注销并login该用户的一种方法?

如何向客户端发送Facebooklogin后创build的JSON Web Token?

我试图find一种方法来发送在服务器端创build的JSON Web令牌到客户端,以便客户端可以将其存储在HTML5本地存储。 具体来说,我的应用程序使用Passport进行身份validation,使用NodeJS / ExpressJS构build,有两种用户:本地用户和Facebook用户。 当本地用户用他们的用户名和密码填写login表单时,客户机要求服务器进行authentication,服务器向客户机发送JWT,然后存储在本地存储器中。 $.ajax({ url: "/authenticate", type: 'POST', data: user, dataType: "json", success: function(auth){ localStorage.setItem("token", auth.token); window.location.href = '/welcome.html'; }, failure: function(errMsg) { alert("falure"); window.location.href = '/login.html'; } }); 然后,用户被redirect到一个Welcome页面,该页面在本地存储器中查找以查找令牌,以从数据库中请求一些数据。 $.ajax({ url: "/protectedEndpoint", type: 'GET', dataType: 'json', beforeSend: function (xhr){ xhr.setRequestHeader('Authorization', localStorage.token); }, success: function (data) { … }, error: function (e) […]

使用passport.js,mysql和express-session持久login状态

我有一个应用程序,使用Passport.js通过Facebookvalidation用户,并可以成功地做到这一点。 但是,只要我的node.js服务器被重置,用户就会被注销。 看起来像快速会话是坚持login状态的方式,但是我读过的每个答案似乎都说你必须使用mongodb或redis来实现这一点。 我们正在使用Mysql。 有没有办法使用快递会话与MySQL来坚持login状态?

如何configuration多个会话的快递和护照

我需要实现一个HTTP服务器,支持与护照分开的会话处理。 原因是我需要身份validation2个实体:我的客户(客户)和他们的客户(用户),我的想法是使用自己的安全“空间”:自己的会话中间件,不同的会话属性,自己的通行证实例。 它工作正常,如果我只是使用会话存储的帐户,但不是这个代码的用户: const express = require('express') const session = require('express-session') const Passport = require('passport').Passport const userPassport = new Passport() const accountPassport = new Passport() // add passport strategies const app = express() app.use(session({ secret: config.session.secret, //store: accountSessionStore, resave: true, saveUninitialized: true, })) app.use(accountPassport.initialize({ userProperty: 'account' })) app.use(accountPassport.session()) app.use(userPassport.initialize({ userProperty: 'user' })) 一旦我添加这行app.use(userPassport.session())在最后它打破了:账户的loginstream不再工作。 看来,快递会话中间件不能处理多个护照实例,最后一次调用覆盖实例。 将帐户和客户包装到自己的实例中,如下所示: […]

使用passport-azure-ad OIDCStrategy与Passportjs时遇到问题

我正在尝试使用passport-azure-ad来validation用户身份。 该应用程序显示常见的login屏幕,但当我login,浏览器窗口变为空白,并显示一个微调指示其工作。 与此同时,我的服务器正在接收连续的POST请求到我的callbackterminal。 在此期间,我的护照function(validation,serializeUser和deserializeUser)都不会被调用。 这里是我的战略定义: passport.use("azure", new azureStrategy({ identityMetadata: 'https://login.microsoftonline.com/common/.well-known/openid-configuration', clientID: "*************************", responseType: 'code id_token', issuer: "https://sts.windows.net/********************/", responseMode: 'form_post', redirectUrl: "http://localhost:5055/auth/azure/callback", allowHttpForRedirectUrl: true, clientSecret: "**********************************" }, function(iss, sub, profile, accessToken, refreshToken, done) { console.log("ID TOken: ", profile.oid); //Never gets called console.log("User" ,profile) //Never gets called done(null, profile); })); passport.serializeUser(function(user, done){ console.log("serialize: ", user) //Never gets […]

无法发布来自Ionic应用程序的HTTP请求

我正尝试login到本地托pipe的应用程序(现在)使用ionic framework。 这是我login的nodejs后端代码,这是为web应用程序的意思,但现在我也为android platfrom // process the login form app.post('/login', passport.authenticate('local-login', { successRedirect: '/profile', // redirect to the secure profile section failureRedirect: '/login', // redirect back to the signup page if there is an error failureFlash: true // allow flash messages })); HTML代码在离子 <ion-item> <ion-input type="text" placeholder="Email" name="email" [(ngModel)]="email"></ion-input> </ion-item> <ion-item> <ion-input type="password" placeholder="Password" name="password" […]

节点+快递+护照:req.user未定义,但在邮递员的作品

我的问题类似于这个,所有的答案没有帮助我。 我使用Passport.js本地策略(护照本地mongoose)。 下面的中间件工作在Postman上,但是每当我从我的React客户端尝试时都会失败。 exports.isLoggedIn = (req, res, next) => { console.log(req.user) // undefined with react, but works from postman if (req.isAuthenticated()) { return next(); } } 这是我的app.js: require('./handlers/passport'); app.use(cors()) app.use(session({ secret: process.env.SECRET, key: process.env.KEY, resave: true, saveUninitialized: true, store: new MongoStore({ mongooseConnection: mongoose.connection }) })); app.use(passport.initialize()); app.use(passport.session()); 处理器/ passport.js: const passport = require('passport'); const mongoose […]