Tag: passport.js

节点 – Passport Auth – Authed Post路由在表单提交时挂起

这是一个奇怪的。 我护照的“本地策略”为我的快递应用程序,我遇到了一个奇怪的问题。 本质上,我有三条路线。 每个人都有一个auth检查到位。 app.get('/admin', authenticatedOrNot, adminRoute.index); app.get('/admin/new', authenticatedOrNot, adminRoute.newpost); app.post('/admin/new', authenticatedOrNot, adminRoute.create); authenticatedOrNot方法很简单: var authenticatedOrNot = function(req, res, next){ if(req.isAuthenticated()){ next(); }else{ res.redirect("/login"); } } 完美的login到pipe理区域,并检查用户是否login,但是当我提交表单到'/ admin / new'Postpath时,浏览器挂起。 控制台中没有任何事情发生,即使使用console.log也是如此: exports.create = function(req, res){ console.log(req); // Database logic here res.redirect('/admin'); } 我似乎无法得到它的工作。 它只是挂起,最终失败。 浏览器控制台只是说在networking请求中的“挂起”。 我曾尝试从postpath和相同的问题中删除“authenticatedOrNot”方法,但如果我删除所有三个,它工作正常。 我难倒了。 任何帮助家伙? 其他人遇到这个?

PassportJS req.user发送所有用户数据

我使用PassportJS本地策略进行用户authentication,其工作完全正常。 但是,当我尝试在任何经过​​身份validation的页面上的console.log(req.user)时,我将获取当前login用户的所有数据库条目详细信息。 这是正常的吗? 包括散列密码 { name: 'Test', email: 'vxxxxx@gmail.com', password: '$2a$10$aw2aMtXtrmKHi.kd97c0NeMOu6Y0hlcM4xk2VuqfneLYdEkc676eq', phone: 9xxxxx6, _enabled: true, _id: 5253f326003e55f028000001, __v: 0 } 我的本地策略是这样定义的。 passport.use(new strategy(function(username, password, done) { User.findOne({ "email": username }, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Unknown user ' + username }); } if(user._enabled==false) […]

sails.js与护照叽叽喳喳

我正在整合passport和sails 。 虽然谷歌和脸书在我的应用程序工作正常,我很难与Twitterauthentication! 当点击“使用twitterlogin”button时,会出现一个错误提示: Error: OAuthStrategy requires session support. Did you forget app.use(express.session(…))? Error: OAuthStrategy requires session support. Did you forget app.use(express.session(…))? 我在这里读到,会话是必要的Twitterauthentication工作。 我确定我的应用程序已启动会话! 我testet passport-twitter一个简单的快递应用程序(无风帆),以确保该模块正在工作,我的twitter凭据是完好无损的。 我假设帆会议是不同的expression会议? 风帆会改变会议的方式吗? 有关如何解决这个问题的任何build议? 编辑:添加一些更多的信息按要求在评论: 风帆版本:0.9.13 UserController.js: … twitter: function(res, req) { passport.authenticate('twitter', {failureRedirect: '/login'}, function(err, user, info) { return console.log(err, user, info); })(req, res); } … configuration/ passport.js: … […]

Passport-Twitter – 错误:无法在会话中查找请求令牌

我正在使用passport-twitter在我的网站上build立一个twitter连接。 用户可以通过点击“login”或“添加新项目”进行连接。 2之间的唯一区别是,如果他们点击添加新项目,模式窗口应该打开一旦他们login。 要知道button,他们点击,我存储在req.session.referrerurl: // route for twitter authentication and login app.get('/auth/twitter', function(req, res, next){ req.session.referrer = req.url; console.log(req.session); passport.authenticate('twitter')(req, res, next); }); app.get('/auth/twitter/new', function(req, res, next){ req.session.referrer = req.url; console.log(req.session); passport.authenticate('twitter')(req, res, next); }); // handle the callback after twitter has authenticated the user app.get('/auth/twitter/callback', function(req, res, next){ var options = { successRedirect : […]

如何从与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 […]