我正在使用passport.js,如果我可以将facebook id链接到登录用户的帐户,我就会受伤.像这样的东西:
passport.use( new FacebookStrategy({
consumerKey: ---
consumerSecret: ---
callbackURL: "http://mycallback"
},
function(token, tokenSecret, profile, done) {
if (user is logged in)
user = User.addfacebookId(user, profile.id)
done(user);
}
}
));
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Express框架进行Node的第一步.我试图使用Passport实现一个微小的身份验证示例.但是,我无法使其发挥作用; 我一直收到错误:Error: failed to serialize user into session.
我安装了node-inspector来试着看看发生了什么.显然,我的序列化函数被调用,并按done(null, 0)预期执行.我试过看看Passport代码,但我无法理解问题是什么.这几乎是我第一次尝试Node应用程序,所以我不熟悉代码.有人能给我一个暗示吗?谢谢.
var express = require('express');
var jade = require('jade');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var app = express();
/*
* Settings
*/
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({ secret: 'cat in the bag' }));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(
function(username, password, done) {
done(null, { id: 0, username: 'juancito' });
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, …Run Code Online (Sandbox Code Playgroud) 我有两个nodejs服务器(web-server,socket-server),它们通过socket.io相互连接.在Web服务上,我使用express.js和passport.js作为身份验证中间件.
这是我的网络服务器配置:
var express = require('express'),
mongo = require('mongodb'),
io = require('socket.io'),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
MongoStore = require('connect-mongo')(express);
app.configure(function () {
app.use(express.cookieParser());
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(express.session({
secret: 'keyboard cat',
store: new MongoStore({
db: 'MyDatabase'
})
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(__dirname + '/htdocs'));
});
Run Code Online (Sandbox Code Playgroud)
当我使用connect-mongo时,它会为每个http请求创建一个新会话.
此元素使用登录请求创建:
{
"_id" : "UCnXade6Bk6ofOZ+jiEgzyH8",
"session" : "{\"cookie\":{\"originalMaxAge\":31536000000,\"expires\":\"2014-03-07T13:07:45.703Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"50cae08806e31ea2e5634e3f\"}}",
"expires" : new Date("7.3.2014 19:07:45")
}
Run Code Online (Sandbox Code Playgroud)
每当我按F5或接受套接字时,此元素就会创建.
{
"_id" : "JhypbYFtj1CGOK/ylMhG8+Yk",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
"expires" : new Date("21.3.2013 19:03:38")
}
Run Code Online (Sandbox Code Playgroud)
当web-server采用套接字连接时,connect-mongo会创建新会话.每分钟大约有50个新文档.
可能是什么原因?
UPDATE
在更新页面的情况下,帮助提示添加app.use(express.favicon()). …
我想知道AngularJS中最好的方法是保护管理页面,即普通用户不应该看到的页面.显然,会有后端身份验证,但由于AngularJS应用程序是客户端,人们理论上仍然可以查看路由并直接转到这些URL并查看管理页面.
我使用Express,PassportJS和MongoDB(Mongoose)作为我的后端.当然,他们无法与管理页面进行交互,因为在创建,删除时都有服务器端身份验证......但我更倾向于甚至不向用户提供页面,如果他们没有适当的访问.由于该应用程序完全是客户端JS,我认为这是不可能的,因为人们可以只修改路由和诸如此类的东西.最好的方法是什么?感谢您的任何意见!
我的应用程序使用Express和AngularJS.我正在使用express通过静态来处理角度代码的基本网络搜索.角度代码使用命中由express托管的API端点的服务.我只希望在用户通过身份验证后可以访问API端点.我怎样才能通过PassportJS实现这一目标?
我们使用Node + Express + Passport进行身份验证,并将会话信息保存到Redis.我在会话cookie上设置了maxAge,在一小时内超时.这一切似乎都运行正常,但问题是,无论用户的活动如何,会话cookie都将在一小时后到期.
有没有办法可以手动刷新/保持会话cookie?
我在我的node.js应用程序上使用Passport,我目前正在使用用户名登录.
在我的用户注册页面上,我允许用户注册其唯一的用户名和电子邮件.
我想要一个登录页面"使用用户名/电子邮件登录:" _ __ _ __ _ _
脚本可以检测字段中是否有"@"并查找电子邮件而不是用户名.
我试了好几个小时但没有用.
这是我的passport.js
var mongoose = require('mongoose')
var LocalStrategy = require('passport-local').Strategy
var User = mongoose.model('User');
module.exports = function(passport, config){
passport.serializeUser(function(user, done){
done(null, user.id);
})
passport.deserializeUser(function(id, done) {
User.findOne({ _id: id }, function (err, user) {
done(err, user);
});
});
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
}, function(username, password, done) {
User.isValidUserPassword(username, password, done);
}));
}
Run Code Online (Sandbox Code Playgroud)
编辑:下面是所请求的user.js
var mongoose = require('mongoose');
var hash = require('../util/hash.js');
UserSchema = mongoose.Schema({
username: String,
email: String, …Run Code Online (Sandbox Code Playgroud) 我已经成功地将半打护照策略(facebook,twitter,linkedin,instagram,tumblr,google,youtube)与oauth1和oauth2令牌交换成一个独立的auth服务器,在Mongo中保存会话并创建活动配置文件,使用令牌/会话/代码/ id字段以及使用Tedious.js在SQL Server中使用许多标准化的属性字段.这些护照工具非常好,谢谢.
我对该项目的最后一个挑战是将用户名和密码放入活动目录存储库,以同样的方式查找和验证.我一直在尝试了一遍又一遍护照LDAP,护照ldapauth(基于ldapauth-gfork,基于ldapjs),护照windowsauth和护照Kerberos和似乎是得到相关证书错误(深码,加入控制台.logs试图弄清楚我在语法上的错误).
是否有任何其他资源和文档可以使用Passport的任何策略访问Node.js中的LDAP/AD?DN与ou语法以及帐户访问用户(具有专门设置用于访问AD的服务帐户)的存储库与您正在查找的帐户用户和过滤器的位置使得很难找到与弄清楚相关的任何错误哪里出错了 你匹配sAMAccountName还是uid?我一直收到"未经授权"的错误.
与其他70种护照策略不同,其中的文档和示例是明确的,只是工作,而不是ad/ldap护照.任何人都可以指向一个很好的测试,文档或设置,与Passport.js和Active Directory特别合作?
我正在尝试将oauth2服务器与API集成,并且非常困难.在这个例子中,使用了3种不同的策略(本地,基本,持票人); 对此有解释吗?如何创建客户端密钥和机密?是否有一个用户简单登录的工作示例?
我使用Winston进行日志记录:
var winston = require('winston');
var logger = new(winston.Logger)({
transports: [
new(winston.transports.Console)(),
new(winston.transports.File)({filename: '/var/log/logF.log'})
]
});
Run Code Online (Sandbox Code Playgroud)
我写这个日志:
logger.log("File: " + path + " was found");
Run Code Online (Sandbox Code Playgroud)
由于某种原因,文件/var/log/logF.log未更新,标准输出也未显示日志.
我如何使用它,所以日志将写在'/var/log/logF.log'?