我正在使用visual studio代码IDE和typescript,如何让它在构建期间忽略node_modules文件夹?或者让它.ts在保存时构建文件?它显示了很多错误,因为它正在尝试编译node_modules tsd.
目前我的tasks.json是
{
"version": "0.1.0",
// The command is tsc.
"command": "tsc",
// Show the output window only if unrecognized errors occur.
"showOutput": "silent",
// Under windows use tsc.exe. This ensures we don't need a shell.
"windows": {
"command": "tsc.exe"
},
"isShellCommand": true,
// args is the HelloWorld program to compile.
"args": [],
// use the standard tsc problem matcher to find compile problems
// in the output.
"problemMatcher": "$tsc"
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Node.js并打算使用Passport进行身份验证.但是,我在网上看到的所有示例都假设用户已经创建.我想知道如何在将用户的会话保存在数据库中之后正确地创建用户的会话(我有这部分工作),以便Passport识别它们.(我不想保存新用户,然后强制他们转到登录页面.)
我正在尝试在/register表单上提交POST后立即进行身份验证并登录用户.理想情况下,我希望用户能够注册,然后立即重定向到仪表板,而无需再次输入凭据.
我的服务器使用Passport 0.1.17,本地策略配置为使用电子邮件地址和密码登录.目前的代码是:
app.post('/register', function(req, res) {
// attach POST to new User variable
var registerUser = new User({ email: req.body.email, password: req.body.password, name: req.body.name });
// save registerUser Mongo
registerUser.save(function(err) {
if(err) {
console.log(err);
} else {
console.log('registerUser: ' + registerUser.email + " saved.");
}
});
// here is where I am trying to authenticate and then redirect
passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
res.redirect('/dashboard');
});
Run Code Online (Sandbox Code Playgroud)
我如何重构此代码以保存新用户,然后进行身份验证并最终重定向到仪表板?
提前致谢!
我试图这么做很多天但我的所有测试都失败了......
我平台上的用户使用passportjs策略(paypal,facebook,google ...)连接它们.
当用户连接时,我在标题的右侧写下他的昵称.标题的html代码是从把手模板生成的,当这个部分由expressjs提供时,我将req.user会话对象发送到模板,以便写入昵称和其他信息......
顺便说一句,这很好用,但是当用户从他的个人资料中更新他的昵称时我遇到了问题,我无法在服务器端更新会话对象,如果用户重新加载页面,则再次出现旧的昵称.
我不希望每次用户加载页面时都要求DB提供用户信息,所以我想保留这个配置:
// -- Passport session setup
passport.serializeUser(function(user, done) { done(null, user); });
passport.deserializeUser(function(obj, done) { done(null, obj); });
Run Code Online (Sandbox Code Playgroud)
我的中间件设置本地:
// -- Set accessible datas from the template
res.locals = _.extend(res.locals, {
user: req.user,
query: req.url,
title: app.config.title,
url: app.config.url
});
Run Code Online (Sandbox Code Playgroud)
我失败了:
// Trying to update req.user directly : not persistent
req.user.nickname = User.get('nickname');
// Trying to update passport session : exception error
req.session.passport.user = User.toJSON();
// Trying to replace full session object : not persistent …Run Code Online (Sandbox Code Playgroud) 我正在开展内部服务的Google Auth.它是一个带有Node后端的JS客户端繁重的应用程序.我选择使用带有passport-google-oauth策略的Node模块Passport.js.
我已经成功地使它工作但有一件事仍然令我感到困惑.我想确保我的应用程序只允许公司员工登录.根据官方文档,我了解您可以使用名为"hd"的参数来限制域名登录.
首先,您在Passport.js的上下文中将该参数发送到哪里?我只是不明白放在代码中的位置.如果它有帮助,我一直在遵循例如passport-google-oauth提供的示例.
其次,理论上这一切是如何运作的?是否在谷歌方面,他们拒绝任何试图通过我们公司以外的域访问该应用程序的人.或者它在我身边,我需要检查用户登录的域名?
在我的Node/Express应用程序中,我有以下代码,它假设从文件中读取PDF文档,并将其发送到浏览器:
var file = fs.createReadStream('./public/modules/datacollectors/output.pdf', 'binary');
var stat = fs.statSync('./public/modules/datacollectors/output.pdf');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=quote.pdf');
res.pipe(file, 'binary');
res.end();
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误,但我也没有在浏览器中获取该文件.我究竟做错了什么?
google有几种方法可以检查文件是否为空,但我需要做相反的事情.
If (file is NOT empty)
do things
Run Code Online (Sandbox Code Playgroud)
我怎么批量做?
快速背景:
我正在编写一个Mongo/Express/Angular/Node SPA并使用护照我已经设置了OAuth登录选项来处理用户身份验证/授权.
使用护照我在服务器上成功维护会话,因此我的所有XHR请求(需要它)都在检查登录用户.
在登录服务器时,将基本用户会话信息放入cookie中供客户端在授权回调中查找,然后我使用angular-cookies'$ CookieStore访问客户端上的cookie,将其保存到rootscope并清除cookie .
问题:
除了用户刷新浏览器的任何事件之外,这是完美的工作,这导致我的rootcope会话显然被擦除.
所以我正在考虑将会话信息存储在浏览器本地存储中(使用store.js),然后即使在初始加载时我也可以检查浏览器本地存储中存在的会话,如果已经有会话则绕过OAuth登录.
这是不好的做法,还是在浏览器本地存储中存储用户会话信息时存在一些后勤/安全问题?
此应用程序没有任何敏感数据,注册是免费的,登录实际上只有那里,所以我可以跟踪用户并存储在应用程序中为每个用户创建的数据.并且用户会话永远不会有密码(我只允许OAuth登录没有本地选项).
我想在来自mongodb的用户对象中添加自定义键,这将由passport.js使用,但我想知道为什么我不能为该对象添加更多键,这是我的代码.
passport.use(new LocalStrategy(
function(username, password, done) {
Users.model(false).findOne( {email:username,password:encodePassword(password) }, function(err, user) {
if( err ){ // validation failed
console.log('Error Occurred');
return done(err);
}
else if(user != null){
user['customKey'] = "customValue"; // it is not setting
console.log(user);
return done(null, user);
}
else {
return done(null, false, { message: 'Incorrect username.' });
}
});
}
));
///Session handling
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
Users.model(false).findById(id, function(err, user) {
done(err, user);
});
});
Run Code Online (Sandbox Code Playgroud) 我很擅长使用护照进行身份验证,因此需要大量的代码片段
我的服务器配置为:
var router = require('./app/config/routes');
var googleStrategy = require('./app/config/passport');
var session = require("express-session");
var passport = require('passport');
app.use(session({secret : '<secret-key>'}));
app.use(passport.initialize());
app.use(passport.session());
googleStrategy(passport);
Run Code Online (Sandbox Code Playgroud)
我的路由配置为
module.exports = function(app, passport) {
app.get('/auth/google', function() {
passport.authenticate('google', {scope: ['profile', 'email']});
});
app.get('/auth/google/callback', function() {
passport.authenticate('google', {
successRedirect: '/profile',
failureRedirect: '/fail'
});
});
.... ALSO configured /profile and /fail
};
Run Code Online (Sandbox Code Playgroud)
我的护照配置为
passport.serializeUser(function(user, callback){
console.log('serializing user.');
callback(null, user);
});
passport.deserializeUser(function(user, callback){
console.log('deserialize user.');
callback(null, user);
});
var processRequest = function(token, refreshToken, profile, callback){
process.nextTick(function(){
console.log('id …Run Code Online (Sandbox Code Playgroud) node.js ×8
passport.js ×7
express ×4
session ×3
oauth-2.0 ×2
angularjs ×1
batch-file ×1
javascript ×1
oauth ×1
typescript ×1
windows ×1