我已经从Github,npm模块和SO上的类似问题的指令中剪切并粘贴了每个代码块。无论如何,解决方案都没有成功。我正在使用Ubuntu 14.04,Nodejs Express和Postgresql。我想我现在不知道我在做什么。这是我目前得到的错误:
我倾向于认为我的代码存在问题,而且这个错误是由于这个而不是实际模块的失败。为了以防万一,我已经向作者报告过了。这是来自app.js的代码:
// POSTGRESQL AUTHORIZATION FUNCTION
var findOrCreate = function(username,id) {
if (db.query("SELECT EXISTS(select username from users where github_id="+id)) {
passport.authenticate('local');
res.redirect('/', { user: req.user });
} else {
db.query("INSERT INTO users (username, github_id) VALUES ($1, $2)"), [username, id], function(err, res) {
if (!err) {
passport.authenticate('local');
res.render('/', { user: req.user });
}
console.log(err);
};
}
};
// GITHUB AUTHENTICATION
passport.use(new GitHubStrategy({
clientID: GITHUB_CLIENT_ID,
clientSecret: GITHUB_CLIENT_SECRET,
callbackURL: "http://localhost:5000/auth/github/callback"
},
function(accessToken, refreshToken, profile, done) {
process.nextTick(function() {
console.log("Access Token: " + accessToken);
console.log(profile.username);
findOrCreate(profile.username, profile.id);
return done(null, profile);
});
}));
在谷歌浏览器的控制台中,我尝试使用Github登录时收到ERR_CONNECTION_REFUSED
。
我正在尝试通过Github授权登录,检查我的数据库中的users表的Github凭据。如果在数据库中找到用户,请使用找到的凭据登录。如果没有,请存储他们的用户数据并登录。
我在这里做错了什么?
答案 0 :(得分:0)
我假设你正在使用node-postgres模块pg,pg.query接受回调,所以让我们利用这个功能并实际分离关注点:
我还真的建议使用passport-github2模块来维护github oauth策略并保持最新状态:
var findByGithubId= function(githubId, callback) {
return db.query('SELECT * FROM "users" WHERE github_id = $1', [githubId], callback);
};
并创建:
var createOne = function(username, githubId, callback){
return db.query("INSERT INTO users (username, github_id) VALUES ($1, $2)", [username, githubId], callback);
};
为github定义护照处理程序:
var passportGithubHandler = function(accessToken, refreshToken, profile, done) {
findByGithubId( profile._json.id, function(err, user) {
if (!user) {
createOne(profile._json.name , profile._json.id , function(err, result){
if (err) done(err);
user= result.rows[0]; // not sure about this one please investigate, console.log might help
return done(err, user);
})
} else {
return done(err, user);
}
});
};
传递处理程序:
passport.use(new GitHubStrategy({
clientID: GITHUB_CLIENT_ID,
clientSecret: GITHUB_CLIENT_SECRET,
callbackURL:"http://localhost:5000/auth/github/callback"
},
passportGithubHandler));
然后定义要验证的路由
app.get('/auth/github',
passport.authenticate('github'));
回调路线
app.get('/auth/github/callback',
passport.authenticate('github', { failureRedirect: '/login' }),
function(req, res) {
// render or redirect or do whatever you have access to req.user now
res.redirect('/');
});