Express应用程序中的Express会话和Passport会话冲突吗?为什么或者为什么不?
以下是一些区分Express和Passport会话对象的代码:
app.use(express.session({}));
app.use(passport.session());
app.use(session({
cookie : {
maxAge : 60000
}
}));
Run Code Online (Sandbox Code Playgroud) 如果你使用return语句而不是yield,我很难找到会发生什么.
function *gen(){
const val = yield someAsyncFn();
assert.equal(val,4);
return val;
}
Run Code Online (Sandbox Code Playgroud)
退货的收益与收益率有何不同?我假设return作为一个普通的return语句,但是生成器函数的上下文,它也会调用gen.return()吗?有点令人困惑.
也许以上只是与此相同?
function *gen(){
const val = yield someAsyncFn();
assert.equal(val,4);
yield val;
}
Run Code Online (Sandbox Code Playgroud) 假设我手上有一个数字 18,而不是一个数组。
给定数字 X 而不是 X 元素数组,在 JS 中创建功能循环的最佳方法是什么?
我可以做这个:
[1,2,3].forEach(function(){
));
Run Code Online (Sandbox Code Playgroud)
但如果我有数字 3
我可以
for(var i = 0; i < 3; i++){
}
Run Code Online (Sandbox Code Playgroud)
但我希望该循环能够正常工作
我意识到git的工作原理是区分文件的内容.我有一些我想复制的文件.为了绝对防止git变得困惑,是否有一些git命令可用于将文件复制到不同的目录(不是mv,但是cp),并且还可以暂存文件?
我想使用$>npm start它并使用"nodemon"进行开发,使用"node"进行生产.我不能把条件逻辑放在我的package.json文件中,那么最好的方法是什么呢?
我正在寻找一种方法来使用Passport.js的Twitter策略,而无需在数据库中使用会话集合/表.这样做的原因是我们将会话集合中的所有数据保存得非常大,并且每当用户发出请求时我们都会保存数据库往返,因为我们不必每次都去数据库获取会话数据.
无论如何,我们应该能够使用令牌(JSON Web令牌)来验证用户,这篇伟大的文章如何描述:
https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens
但我很困惑为什么没有一种简单的方法可以用Passport做到这一点?(文章在没有Passport的情况下完成所有工作 - 但是Passport肯定会覆盖这个吗?).
也许我正在过度思考这个问题并且这样做的方法就是省略我在Express中使用数据库会话的调用,然后Passport已经足够智能来处理JWT了?不知怎的,我怀疑.
例如,仅仅在我的Express服务器中注释掉这些代码是不够的:
//app.use(expressSession({
// secret: 'arrete_x_paulette',
// store: new MongoStore({mongooseConnection: mongoose.connection}),
// saveUninitialized: true,
// resave: true,
// cookie: {
// secure: false,
// maxage: 6000000
// },
// proxy: false
//}));
Run Code Online (Sandbox Code Playgroud)
和
//app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)
那么使用Passport就足够了?
为什么有人会使用存储在数据库中的会话而不是使用基于JWT的身份验证?
有没有办法使用npm包来验证包名?
const npm = require('npm');
const isValid = npm.validatePackageName('foobar'); // true
const isValid = npm.validatePackageName('-4! *'); // false
Run Code Online (Sandbox Code Playgroud)
我看到一个userland包执行此操作,但肯定npm包本身可以做到这一点?是否有从该包中导出的公用事业?
根据这篇文章
http://toon.io/understanding-passportjs-authentication-flow/
看起来好像PassportJS/Express将登录用户存储在两个地方
req.user
Run Code Online (Sandbox Code Playgroud)
和
req.session.passport.user
Run Code Online (Sandbox Code Playgroud)
为什么两个?我应该使用哪一个?当我使用护照注销时,是否会销毁req.user和req.session.passport.user?
我不确定为什么我期望这个工作:
# Dockerfile
FROM node:6
FROM java:8
Run Code Online (Sandbox Code Playgroud)
但它确实不起作用 - 看起来第一个命令被忽略,第二个命令工作.
有没有一种直接的方法在Docker容器中安装Node.js和Java?
最终我试图解决的问题是我在运行Selenium Webdriver时遇到ENOENT错误 -
[20:38:50] W/start - Selenium Standalone server encountered an error: Error: spawn java ENOENT
Run Code Online (Sandbox Code Playgroud)
而现在我认为这是因为Java没有安装在容器中.
我有这个$ http请求拦截器
app.config(function($httpProvider) {
$httpProvider.interceptors.push(function() {
return {
request: function(req) {
// Set the `Authorization` header for every outgoing HTTP request
req.headers['cdt_app_header'] = 'tamales';
return req;
}
};
});
});
Run Code Online (Sandbox Code Playgroud)
有没有什么办法可以为每个$ http请求添加标头或cookie,但是使用JavaScript保持标头值安全/不可见?
我们可以添加一个带有此标头的模糊层,以防止轻松访问我们的API端点,但我想知道一个更真实安全的解决方案.
Cookie用于安全会话,这些更安全,因为无法使用JavaScript访问它们.假设我们有一个用户可以使用前端代码执行此请求:
GET /api/users
Run Code Online (Sandbox Code Playgroud)
我们真的不希望他们能够使用cURL或浏览器发出简单的请求,而无需额外的信息.我们给他们的cookie将使他们能够使用浏览器地址栏向/ api/users发出GET请求,但是如果我们添加要求另外有一个cookie或标头,那么我们可以阻止他们访问端点以我们不希望他们使用的格式授权的.
换句话说,我们希望尽力为他们提供访问权限,但仅限于前端Angular应用程序的上下文.
node.js ×7
express ×3
javascript ×3
passport.js ×3
npm ×2
angularjs ×1
browser ×1
cookies ×1
cp ×1
docker ×1
dockerfile ×1
ecmascript-6 ×1
express-jwt ×1
git ×1
git-mv ×1
http-headers ×1
java ×1
jwt ×1
nodemon ×1
selenium ×1