Javascript 关于使用Everyauth进行github身份验证的问题
在我导航到url.com/auth/github并授权github后,我会收到下面列出的错误消息,说我没有履行承诺,即使我在App.js中这样做了 App.js:Javascript 关于使用Everyauth进行github身份验证的问题,javascript,node.js,express,sails.js,everyauth,Javascript,Node.js,Express,Sails.js,Everyauth,在我导航到url.com/auth/github并授权github后,我会收到下面列出的错误消息,说我没有履行承诺,即使我在App.js中这样做了 App.js: var appPath = __dirname + '/app' , http = require('http') , path = require('path') , fs = require('fs') , everyauth = require('everyauth') everyauth.g
var appPath = __dirname + '/app'
, http = require('http')
, path = require('path')
, fs = require('fs')
, everyauth = require('everyauth')
everyauth.github
.appId('xxxxxxx')
.appSecret('xxxxxxx')
.findOrCreateUser( function (session, accessToken, accessTokenExtra, githubUserMetadata, promise) {
var promise = this.Promise();
var user = {
name: githubUserMetadata.name,
email: githubUserMetadata.email,
username: githubUserMetadata.login,
firstName: name.substring(0, name.indexOf(' ')),
githubId: githubUserMetadata.id
};
app.User.findOne({githubId: githubUserMetadata.id }, function(err, user) {
if (!user) {
User.create(user, function userCreated(err, user){
req.session.User = user;
});
promise.fulfill(user);
}
});
return promise;
})
.redirectPath('/');
我使用的框架是Sailsjs,它应该使User.create成为可能
浏览器中的错误消息,而不是终端终端终端中没有错误:
Error: Step findOrCreateUser of `github` is promising: user ; however, the step returns
nothing. Fix the step by returning the expected values OR by returning a Promise that
promises said values. at Step.exec (/app/node_modules/everyauth/lib/step.js:79:7) at
/app/node_modules/everyauth/lib/stepSequence.js:26:34 at Promise.fulfill
(/app/node_modules/everyauth/lib/promise.js:44:21) at
/app/node_modules/everyauth/lib/stepSequence.js:29:19 at Promise.callback
(/app/node_modules/everyauth/lib/promise.js:12:8) at
/app/node_modules/everyauth/lib/stepSequence.js:28:19 at Promise.fulfill
(/app/node_modules/everyauth/lib/promise.js:44:21) at
/app/node_modules/everyauth/lib/stepSequence.js:29:19 at Promise.fulfill
(/app/node_modules/everyauth/lib/promise.js:44:21) at
/app/node_modules/everyauth/lib/modules/github.js:50:9
谢谢你的帮助 我想应该是这样
app.User.findOne({githubId: githubUserMetadata.id}, function(err, user) {
if (err) {
promise.fail(err);
} else if (!user) {
User.create(user, function userCreated(err, user){
if (err) {
promise.fail(err);
} else {
req.session.User = user;
promise.fulfill(user);
}
});
} else {
promise.fulfill(user);
}
});
不幸的是,这个库使用的方法似乎缺少一些重要的特性,这些特性使得处理承诺变得更加容易。它不是偶数:-我猜User.create是异步的,并且promise.fulfill不喜欢被空调用。@Bergi您的猜测是正确的。promise.fulfill需要进入userCreated内部。