Articles of passport.js

如何从与nodejs的angular度获得“req.something”的等价物

我正在关注如何使用nodejs和护照进行身份validation的教程。 ( http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local ) 本教程使用ejs渲染模板并传入闪存数据。 而不是这个,我想使用angularjs。 我遇到的问题是获取闪存数据。 我知道如何使用模板和发送variables,但angular度replace下面的代码中的“req.flash('signupMessage')”? 这是教程显示的代码: app.get('/signup', function(req, res) { // render the page and pass in any flash data if it exists res.render('signup.ejs', { message: req.flash('signupMessage') }); }); 这是我build立我的路线的代码 // public/js/appRoutes.js angular.module('appRoutes', []).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { $routeProvider // show signup form .when('/signup', { templateUrl: 'views/signup.html', controller: 'SignupController' }); $locationProvider.html5Mode(true); }]); […]

如何知道用户是否使用passport.js跨子域login

我已经在domain.com和sub.domain.com分别创build了两个Mean.io应用程序,一切都按预期在两个工作,但问题是,子域( sub.domain.com )中的一个需要知道用户被logging在主应用程序( domain.com )中。 我知道护照处理会话,并知道用户是否login,因为它在express.js中的每个请求的req中创build一个用户对象: if (req.user) { // logged in } else { // not logged in } 这里的不便之处在于,这种方法是在域内而不是在外域进行的。 换句话说,如果我以这样的方式请求后端: $http.get('/api/users/me').success(this.onIdentity.bind(this)); 从domain.com ,这将填充用户数据,但是,如果我直接从浏览器做出相同的请求,例如,它返回null。 我需要了解如何跨域传递这些信息? 如果每次请求$http.get('/api/users/me').success(this.onIdentity.bind(this)); 信息被传递到后端?

req.logout()或req.session.destroy()不起作用

更新: 它的行为与我的实际FBlogin一致。 当我注销我的Facebook,然后单击我的网站上的“login”button,它将我redirect到Facebooklogin页面,并要求我login。 之后,我正确地回到我的网站上的“profile.html”网页。 但是,当我从我的网站点击“注销”时,它会进入我网站的主页。 这一次,当我再次点击“login”button,它直接进入我的网站“profile.html”。 看来最后的“注销”根本不起作用。 “注销”只能在我注销我的Facebook帐户时才起作用。 所以在我的网站上使用的会话依赖于Facebook的会话。 很奇怪! 我正在使用PassportJS来完成我的身份validation作业。 但是我发现req.logout()或者req.session.destroy()根本不起作用。 // route for showing the profile page app.get('/login', isLoggedIn, function(req, res) { res.render('profile', { user : req.user // get the user out of session and pass to template }); }); // route middleware to make sure a user is logged in function isLoggedIn(req, […]

如何在服务器身份validation后使用JSON Web令牌提供前端?

到目前为止,我只处理服务器呈现的应用程序,在用户通过用户名/密码login或使用OAuth提供程序(Facebook等)后,服务器只是在redirect到相关页面时设置会话cookie。 然而,现在我试图用一种更现代的方法构build一个应用程序,在前端和一个JSON API后端上都有React。 显然这个标准的select是使用JSON Web令牌进行身份validation,但是我很难解决如何为客户端提供JWT,因此可以将其存储在会话/本地存储或任何地方。 举例说明更好: 用户点击链接( /auth/facebook )通过Facebooklogin 用户被redirect并显示Facebooklogin表单和/或权限对话框(如有必要) Facebook将用户redirect到/auth/facebook/callback ,授权码被拖拽,服务器通过访问令牌和一些关于用户的信息进行交换 服务器使用info在数据库中查找或创build用户,然后创build一个包含用户数据相关子集(如ID)的JWT, ??? 在这一点上,我只是希望用户被redirect到React应用程序的主页(比方说/app ),因此前端可以接pipe。 但我不能想到一个(优雅)的方式来做到这一点,而不会丢失JWT,除了把它放在redirect的查询string中( /app?authtoken=… ) – 但是会显示在地址栏中,直到我用replaceState()或者其他方法手动删除它,并且对我来说似乎replaceState() 。 真的,我只是想知道这是如何做的,我几乎可以肯定我在这里失去了一些东西。 服务器是节点(Koa与护照),如果有帮助。 编辑:为了清楚,我问了什么是使用Passport OAuthredirectstream后 ,提供一个令牌给客户端(这样可以保存)的最佳方法。

如何Twitter使用相同的Twitter应用程序从一个域的多个主机名进行身份validation?

我有两个主机名,通过我的DNS发送到同一个IP: theark.info www.theark.info 我使用theark.info在我的Twitter应用程序中明确地设置了我的callback和域名。 什么是最好的方式,以确保我可以使用相同的Twitter应用程序Oauth使用www.theark.info ,因为我目前得到一个错误: 内部服务器错误 在我的DNS中,我的DNS中有一个CNAME www ,指向theark.info 也许我需要使用Express和Javacsript在请求上操作DOM?

在用户注销后,如何防止浏览器的后退button访问受限制的信息?

我使用这个例子在github上find护照本地策略与mongoose/ mongodb。 我遇到的问题是当用户注销时,他们仍然可以通过点击浏览器上的后退button来访问受限制的信息。 我对node.js很陌生,但我想象一下,在执行后退和前进button之前,需要实现某种types的hook来调用ensureAuthenticated函数 – 位于代码的最底层。 在用户注销后,如何通过点击后退button来防止用户访问受限制的信息? var express = require('express') , passport = require('passport') , LocalStrategy = require('passport-local').Strategy , mongodb = require('mongodb') , mongoose = require('mongoose') , bcrypt = require('bcrypt') , SALT_WORK_FACTOR = 10; mongoose.connect('localhost', 'test'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback() { console.log('Connected to DB'); }); // User […]

护照和智威汤逊

所以我设法让passport-twitter和jsonwebtoken库一起工作,但为了使它正常工作,我必须使用express-session作为中间件。 我不想添加会话,因为我使用jsonwebtoken来返回令牌。 这里是代码autheticate.js router.get('/twitter', function(req, res, next){ passport.authenticate('twitter', {session: false}, function(err, user, info){ if(err){ return next(err); } if(user){ var token = createToken(user); console.log(token); return res.json({token: token}); } else { return res.status(401).json(info); } })(req, res, next); }); 我已经添加了session:false作为参数,但是在server.js上,它一直在吐出错误,我需要使用express-session。 server.js var express = require('express'); var path = require('path'); var logger = require('morgan'); var bodyParser = require('body-parser'); var […]

如何在angular度客户端处理passport-facebookcallback?

我正在开发一个MEAN应用程序。 我正在使用护照进行身份validation – 本地,Facebook和谷歌战略。 我正在使用angularjs客户端。 所有的路由都在客户端处理。 我只使用服务器数据apis。 当使用passport-facebook策略时,我按照护照文档在节点服务器上使用下面的代码。 app.get('/auth/facebook',passport.authenticate('facebook-auth', { scope : ['email'] })); app.get('/auth/facebook/callback',passport.authenticate('facebook-auth', { successRedirect : '/home', failureRedirect : '/login', scope:['email'] })); 我面对的问题是当用户点击“使用Facebooklogin”button <a href="/auth/facebook" class="btn"><i class="fa fa-facebook"></i> Sign in using Facebook</a> 客户端将访问“/ auth / facebook”路线,最终将用户redirect到Facebook页面以validation用户的凭证。 validation成功后,用户将被redirect到按照“successRedirect”值定义的路由“/ home”。 现在的事情是,我想使用自定义callback函数,而不是定义成功或失败的redirect。 它将如下所示: app.get('/auth/facebook/callback',passport.authenticate('facebook-auth', function(err,user,info){ if(err){ throw err; } else if(user === 'userexists'){ res.json({ 'state':false, 'message':'User […]

如何传递一个额外的参数passport.authenticate

(我已经做了fbStrategy.passReqToCallback = true )我fbStrategy.passReqToCallback = true https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-together,但想要使用这个社交authentication服务的多个应用程序,前:控制加热系统,打开喷头等 基本上,如果这些应用程序之一检查服务器,并没有一个正确的令牌,它会被redirect到这个社会authentication服务(社会authentication)。 当用户按下社交loginbutton时,它抓取它到达的应用程序的参数,并将其添加为/auth/facebook/:appid // send to facebook to do the authentication app.get('/auth/facebook/:appId', function(req,res,next){ passport.authenticate( 'facebook', { scope : 'email' } )(req,res,next); }); req req,res,next是序列化的用户logging。 此时social-auth不知道用户是谁。 fbStrategy.passReqToCallback = true; passport.use(new FacebookStrategy(fbStrategy, function(req, token, refreshToken, profile, done) { var email = (profile.emails[0].value || '').toLowerCase() process.nextTick(function() {… 一旦授权完成,我想重新回到调用应用程序,我需要:appId参数骑,所以我可以回到正确的网站。 现在一般情况下,如果我只是把一个像currentAppId这样的variables用于各种社会状态,那么它就可以工作,但是如果你碰巧有多个人在同一时间进行身份validation,那么你可以想象有一个用户返回到错误的应用程序或其他用户的应用程序。 这就是为什么我需要appId作为参数passport.authenticate 。 我应该在哪里找出如何。 […]

我如何使用Passport.js返回到当前散列位置?

我使用Passport.js通过OAuth与Google进行身份validation(我正在使用passport-google-oauth策略)。 它工作正常,但我目前redirect到“/”,我想发送他们到“/”加上当前的哈希标签。 我可以在一个查询string参数中发送散列值,但我似乎无法将该值设置为我传递进行身份validation的对象的callbackURL属性。 有人可以提供一个例子或解释正确的方法来做到这一点? 我并不赞成使用查询string,它似乎是最直接的路线,但我打开使用会话variables或其他东西,如果这将是更容易或更好的做法。 谢谢。